Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 658 Accepted Submission(s): 297
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1e4+88; typedef long long LL; LL dp[N],B[N]; int a[N]; int main(){ int n,m,T; for(scanf("%d",&T);T--;){ memset(dp,0,sizeof(dp)); memset(a,0,sizeof(a)); scanf("%d%d",&n,&m); for(int i=0;i<=m;++i) scanf("%I64d",&B[i]); dp[0]=1; for(int i=1;i<=m;++i){ if(dp[i]==B[i]) continue; a[i]=B[i]-dp[i]; for(int j=1;j<=a[i];++j) for(int k=m;k>=i;--k) dp[k]+=dp[k-i]; } int i; for(i=1;i<=m;++i) if(a[i]--) {printf("%d",i);break;} for(;i<=m;++i) while(a[i]--) printf(" %d",i); puts(""); } }
原文:http://www.cnblogs.com/mfys/p/7308968.html