首页 > 其他 > 详细

hdu 6092

时间:2017-08-08 22:27:31      阅读:192      评论:0      收藏:0      [点我收藏+]

思路:根据前面可能造成后面的情况,再相减即为该数的个数,背包

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e4+10;
 4 
 5 int a[N],b[N],dp[N];
 6 
 7 
 8 int main(){
 9     int t ;
10     cin>>t;
11     while(t--){
12         int n,m;
13         memset(dp,0,sizeof(dp));
14         scanf("%d%d",&n,&m);
15         for(int i=0;i<=m;i++) scanf("%d",&b[i]);
16         int l=0;
17         memset(dp,0,sizeof(dp));
18         dp[0]=1;
19         for(int i=1;i<m;i++){
20             int x=b[i]-dp[i];
21             for(int j=1;j<=x;j++){
22                 a[++l]=i;
23                 for(int k=m;k>=i;k--)
24                     dp[k]+=dp[k-i];
25             }
26         }
27         for(int i=1;i<=l;i++){
28             printf("%d",a[i]);
29             if(i!=l) printf(" ");
30             else printf("\n");
31         }
32     }
33     return 0;
34 }

 

hdu 6092

原文:http://www.cnblogs.com/hhxj/p/7309144.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!