实在想不出来了

P2089 烤鸡

$k>10$ 的时候就算解不对也要 `return`。
by Wengzhou_wwx @ 2023-10-11 19:20:49


没有在 $k>10$ `return` 导致你的 $k$ 不受 `k==10` 的限制。 比如说样例,因为非解没有 `return`。你的 $k$ 会直接到 $11$,此时满足 `last==n` 的限制,然后就存在了一个方案叫做 $11$ 个 $1$,但这个方案是错的。
by Wengzhou_wwx @ 2023-10-11 19:22:48


@[wyuze20081203](/user/1040902)
by Wengzhou_wwx @ 2023-10-11 19:23:16


改了一下真的是这个问题。 ```cpp #include<iostream> using namespace std; int a[114],n,ans,cxk[114514][11]; void dfs(int last,int k) { if(k>10&&last==n) { ans++; for(int i=1;i<=10;i++) cxk[ans][i]=a[i]; return ; } if(k>10)return ; for(int i=1;i<=3;i++) { if(last+i>n) break; a[k]=i; dfs(last+i,k+1); } } int main() { cin>>n; if(n<10||n>30) { cout<<0; return 0; } dfs(0,1); cout<<ans<<endl; for(int i=1;i<=ans;i++) { for(int j=1;j<=10;j++) cout<<cxk[i][j]<<" "; cout<<endl; } return 0; } ```
by xs_siqi @ 2023-10-11 19:24:30


@[wyuze20081203](/user/1040902) 只要枚举完10种调料后直接退出,而不应该只在美味值大于 $n$ 时,才退出。而且只要您的 `last` 不等于 `n`那就不统计答案。所以 ```cpp if(k>10&&last==n) ``` 改为 ``` if(k>10){ if(last!=n) return; ..... } ```
by Mu_leaf @ 2023-10-11 19:25:40


@[Mu_leaf](/user/701254) 谢大佬
by wyuze20081203 @ 2023-10-11 19:29:49


@[xs_siqi](/user/401088) 谢大佬
by wyuze20081203 @ 2023-10-11 19:30:12


|