$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