码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 6092 Rikka with Subset(01背包)

时间:2017-08-08 19:58:58      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:bsp   blank   tar   for   题意   com   sub   include   namespace   

题目链接:hdu 6092 Rikka with Subset

题意:

给你n和m,让你找一个字典序最小的含有n个数的A序列,使得A序列的和为m,

然后给你m+1个数,是A序列所有的集合的和的个数,然后让你找出这个A序列。

题解:

和题解一样的思想。

技术分享

技术分享
 1 #include<bits/stdc++.h>
 2 #define mst(a,b) memset(a,b,sizeof(a))
 3 #define F(i,a,b) for(int i=(a);i<=(b);++i)
 4 using namespace std;
 5 typedef long long ll;
 6 typedef pair<int,int>P;
 7 
 8 const int N=1e4+7;
 9 int t,n,m,ed,an[N],cnt;
10 P ans[N];
11 ll b[N],dp[N];
12 
13 int main(){
14     scanf("%d",&t);
15     while(t--)
16     {
17         scanf("%d%d",&n,&m);
18         mst(dp,0);dp[0]=1;ed=0;
19         F(i,0,m)scanf("%lld",b+i);
20         F(i,1,m)
21         {
22             if(dp[i]<b[i])
23             {
24                 ans[++ed]=P(i,b[i]-dp[i]);
25                 int en=b[i]-dp[i];
26                 F(j,1,en)for(int k=m;k>=i;k--)
27                     dp[k]+=dp[k-i];
28             }
29         }
30         cnt=0;
31         F(i,1,ed)
32         {
33             while(ans[i].second--)
34                 an[++cnt]=ans[i].first;
35         }
36         F(i,1,cnt)printf("%d%c",an[i]," \n"[i==cnt]);
37     }
38     return 0;
39 }
View Code

 

hdu 6092 Rikka with Subset(01背包)

标签:bsp   blank   tar   for   题意   com   sub   include   namespace   

原文地址:http://www.cnblogs.com/bin-gege/p/7308273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!