HDU 6092 Rikka with Subset(动态规划 17多校第五场)
来源:互联网 发布:ipad编程软件 idea 编辑:程序博客网 时间:2024/05/27 20:52
题目大意
有
A1 到An 的n个数构成一个集合,这个集合有2n 个子集,每个子集的所有数相加得到一个和,有一个B 数组,Bi 表示和为i(1≤i≤m) 的集合有多少个.
现在输入n 和m 和B0...Bm ,让你输出A 数组(1≤n≤50,1≤m≤104,0≤Bi≤2n) 分析
我们从一些小的情况开始分析,由题目可知,B0 一定是1,B1 的值就是1的个数,对于B2 ,我们知道它的值就是全部由1组成的和为2的集合数加上元素2的个数.我们用
Ci 表示数i 的个数,知道i的个数之后我们可以通过在之后的B 数组中消掉这个数的影响这样依次的得到每一个Ci 做法是,对于
Ci 不为0的每一个i ,对于i 之后的每一个j ,做Bj=Bj−Bj−i 代码
#include<bits/stdc++.h>using namespace std;const int MAXN=100005;long long int n,m;int T=0;int b[MAXN];int ans[MAXN];int cnt;void Work(){ cnt=0; for(int i=1;i<=m;i++) { int t=b[i]; for(int k=1;k<=t;k++) { ans[++cnt]=i; for(int j=i;j<=m;j++)b[j]-=b[j-i]; } } for(int i=1;i<cnt;i++) printf("%d ",ans[i]); printf("%d\n",ans[cnt]);}int main(){ scanf("%d",&T); while(T--) { memset(b,0,sizeof(b)); memset(ans,0,sizeof(ans)); scanf("%d%d",&n,&m); for(int i=0;i<=m;i++) scanf("%d",&b[i]); Work(); }}
阅读全文
0 0
- HDU 6092 Rikka with Subset(动态规划 17多校第五场)
- 2017 多校训练第五场 HDU 6092 Rikka with Subset
- 2017杭电多校第五场 1008 Rikka with Subset(动规)HDU 6092
- 2017杭电多校第五场Rikka with Subset
- hud Rikka with Subset 2017 多校第五场 (背包)
- 2017 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
- HDU 6092 Rikka with Subset
- HDU 6092 Rikka with Subset
- HDU 6092 Rikka with Subset
- hdu 6092 Rikka with Subset
- HDU 6092Rikka with Subset
- hdu 6092 Rikka with Subset
- HDU 6092 Rikka with Subset
- [HDU 6092] Rikka with Subset
- kafka在windows上的安装、运行
- hdu 4251 The Famous ICPC Team Again(划分树)
- 向sdcard读写
- xml之SAX解析以及数据结构存入java对象
- js中offsetLeft/offsetTop与jq中offset().left/offset().top的区别
- HDU 6092 Rikka with Subset(动态规划 17多校第五场)
- 输入输出流
- 对拍
- IO流
- 想成为挣钱的游戏程序员要经历多少阶段?
- sd卡写入读取
- maven国内快速镜像,国内maven中央仓库地址
- c中的移位运算法
- 向SD卡写内容并且读SD内容