HDU6092---Rikka with Subset(2017多校联赛:逆向dp)
来源:互联网 发布:数据流程图符号含义 编辑:程序博客网 时间:2024/05/01 21:02
题目来源:http://acm.hdu.edu.cn/.php?pid=6092
题意
给出a,b俩数组,其中a数组有n项,b[i]是a数组的子集的和为i的个数,现给出b数组,要求求出a数组。
思路
逆向去考虑这个问题,比如给出b数组: 4 6 4 1 0 6 。
那么该如何求出a数组
首先考虑4,那么有四个1在a数组中,然后四个1可以得到6个2,4个3,以及一个4,那么对于b[2]来说刚好,b[3],b[4]同理,然后是b[6]==1,那么a数组里一定有一个6,为啥不是4个1和一个2呢?因为如果a数组里有2的话,那么b[2]就不会是4了,而是5了。。然后反着去考虑。。。
代码
#include<cmath>#include<queue>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int INF=0x3f3f3f3f;typedef long long LL;const double eps=1e-6;const int N=10000+10;LL a[N],b[N],dp[N];int main(){ int T; scanf("%d",&T); while(T--) { memset(dp,0,sizeof(dp)); int n,m; scanf("%d%d",&n,&m); for(int i=0; i<=m; i++) { scanf("%lld",&b[i]); } int k=0;dp[0]=1; for(int i=1;i<=m;i++) { int res=b[i]-dp[i]; while(res--) { a[++k]=i; for(int j=m;j>=i;j--) { dp[j]+=dp[j-i]; } } } printf("%lld",a[1]); for(int i=2;i<=n;i++) { printf(" %lld",a[i]); } printf("\n"); }}
阅读全文
0 0
- HDU6092---Rikka with Subset(2017多校联赛:逆向dp)
- HDU6092 Rikka with Subset(01背包,2017 HDU多校联赛 第5场)
- 【2017多校】HDU6092 Rikka with Subset 【DP】
- HDU6092 Rikka with Subset【DP】
- HDU6092 Rikka with Subset-01背包dp-2017多校联盟5 第8题
- Rikka with Subset(hdu6092)
- HDU6092 Rikka with Subset
- HDU6092-Rikka with Subset
- hdu6092 Rikka with Subset
- HDU6092(Rikka with Subset)
- HDU6092-Rikka with Subset
- 2017多校训练Contest5: 1008 Rikka with Subset hdu6092
- Hdu6092 Rikka with Subset(2017多校第5场)
- hdu6092 Rikka with Subset (反向背包)
- (hdu6092) 2017杭电多校联赛第5场-Rikka with Subset 动态规划
- HDU6092-Rikka with Subset(背包)
- hdu 多校联赛 6092 Rikka with Subset
- HDU6092-2017多校5&&背包&贪心-Rikka with Subset
- Python高级教程之作用域
- js系列教程3-字符串、正则表达式全解
- POJ 3281 Dining(sap模板大法好)
- SQL CREATE TABLE 语句
- 关于ESP8266WIFI转串口的速率问题(含测试数据)
- HDU6092---Rikka with Subset(2017多校联赛:逆向dp)
- jQuery基础
- 神经网络和深度学习(二)——BP(Backpropagation Algorithm, 反向传播算法)
- 无刷直流电机
- http://blog.csdn.net/bolu1234/article/details/51867099
- 极大连通子图 + 极小连通子图 + 连通分量
- linux系统常用配置讲解
- oracle怎样修改表名、列名、字段类型、添加表列、删除表列
- uva 839 Not so Mobile