这个代码看似没有问题,其实很有问题。(O_O)?
#include<bits/stdc++.h>
using namespace std;
int n,k,a[20],it[20],dp[2010],maxs;
int work(int k,int sum){
memset(dp,127,sizeof(dp));
dp[0]=0;
for(int i=1;i<=k;i++){
for(int j=a[i];j<=n*sum;j++) dp[j]=min(dp[j],dp[j-a[i]]+1);
}
for(int i=1;i<=n*sum;i++){
if(dp[i]>n) return i-1;
}
return n*sum;
}
void dfs(int now,int sum){
if(now>k){
int s=work(k,sum);
if(s>maxs){
maxs=s;
for(int i=1;i<=k;i++) it[i]=a[i];
}
return;
}
int s=work(now,sum);
for(int i=a[k-1]+1;i<=s+1;i++){
a[now]=i;
dfs(now+1,sum+i);
}
}
int main(){
scanf("%d%d",&n,&k);
a[1]=1;
dfs(2,1);
for(int i=1;i<=k;i++) printf("%d ",it[i]);
printf("\nMAX=%d",maxs);
return 0;
}