HDU 6092 Rikka with Subset【多重背包+贪心】
来源:互联网 发布:php好学还是java好学 编辑:程序博客网 时间:2024/05/17 02:53
题目链接
题意:A[1]到A[n]这n个正数,和为m。他们的子集的和显然在[0,m]这个范围,B[i]表示和为i的子集的个数。已知B[0]到B[m],求A这个序列字典树最小的情况。
dp[i]表示到目前为止和为i的子集的个数,cnt[i]表示A中i的个数。cnt[i]=B[i]-dp[i],再加上dp[k]+=dp[k-i]表示从dp[k-i]这个和的状态递推到dp[k]这个和的状态,可以理解为多重背包。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <string>#include <cmath>#include <vector>#include <queue>#include <set>#include <map>using namespace std;#define ll long longconst int maxn=10000+10;int T;int n,m;int b[maxn];int dp[maxn];int cnt[maxn];int a[maxn];int tot=0;int main(){ scanf("%d",&T); while (T--){ memset(dp,0,sizeof(dp)); memset(cnt,0,sizeof(cnt)); tot=0; scanf("%d %d",&n,&m); for (int i=0;i<=m;i++){ scanf("%d",&b[i]); } dp[0]=1; for (int i=1;i<=m;i++){ cnt[i]=b[i]-dp[i]; for (int j=0;j<cnt[i];j++){ a[++tot]=i; for (int k=m;k>=i;k--){ dp[k]+=dp[k-i]; } } } for (int i=1;i<=tot;i++){ if (i==1){ printf("%d",a[i]); } else{ printf(" %d",a[i]); } } putchar('\n'); }}
阅读全文
0 0
- HDU 6092 Rikka with Subset【多重背包+贪心】
- HDU 6092 Rikka with Subset 【dp多重背包】【好题】
- hdu 6092 Rikka with Subset(多重背包)
- HDU 6092 Rikka with Subset(多重背包)
- hdu 6092 Rikka with Subset 背包(贪心)
- HDU 6092 Rikka with Subset 贪心
- Hdu 6092 Rikka with Subset【背包Dp】
- hdu 6092 Rikka with Subset 背包dp
- 【HDU 6092 Rikka with Subset】 思维 & 背包
- hdu 6092 Rikka with Subset 逆向背包
- hdu 6092 Rikka with Subset(dp背包)
- HDU 6092 Rikka with Subset (背包 思维)
- HDU 6092 Rikka with Subset (2017多校5-背包)
- hdu 6092 Rikka with Subset【01背包+思维】
- 2017多校五 1008题 hdu 6092 Rikka with Subset 背包
- HDU 6092 Rikka with Subset(背包+思维)
- HDU 6092 Rikka with Subset(01背包 思维)
- HDU 6092 Rikka with Subset(完全背包)
- bzoj 3376: [Usaco2004 Open]Cube Stacking 方块游戏 带权并查集
- Codeforces 705D Ant Man DP(贡献)
- 扫描手机sdka里的音乐并播放
- 经典.net面试题目
- 全面详细的github中文教程
- HDU 6092 Rikka with Subset【多重背包+贪心】
- ROS-I开发流程
- 基于angularJs和Bootstrap的简易计算器
- POJ
- java.lang.UnsupportedClassVersionError异常
- 如何利用python把文章到数组中存储等待处理
- SPFA模板
- Service播放音乐
- HDU 2844 Coins[【经典题】【模板题】