Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
151805 陈家宝 邮票面值问题 C++ 通过 100 37 MS 256 KB 839 2024-06-18 13:49:35

Tests(4/4):


#include<bits/stdc++.h> using namespace std; int n,k,res,ans[105],tmp[105],dp[2005]; int get(int cur,int sum){ memset(dp,0x3f3f3f3f,sizeof(dp)); dp[0]=0; for(int i=1;i<=cur;i++)for(int j=tmp[i];j<=n*sum;j++)dp[j]=min(dp[j],dp[j-tmp[i]]+1);; for(int i=1;i<=n*sum;i++)if(dp[i]>n) return i-1; return n*sum; } void dfs(int cur,int L1,int L2,int sum){ if(cur>k){ if(res<L2){ res=L2; for(int i=1;i<=n;i++)ans[i]=tmp[i]; } return ; } for(int i=L1+1;i<=L2+1;i++){ tmp[cur]=i; int x=get(cur,sum+i); dfs(cur+1,i,x,sum+i); } } int main(){ while(~scanf("%d %d",&n,&k)){ res=0; dfs(1,0,0,0); for(int i=1;i<=k;i++)printf("%d ",ans[i]); printf("%d\n",res); } return 0; }


测评信息: