hdu 6092 Rikka with Subset 01背包 思维
dp[i][j]表示前i个元素,子集和为j的个数。d[i][j] = d[i][j] + d[i-1][j-k] (第i个元素的值为k)。这里可以优化成一维数组
比如序列为 1 2 3,每一步的dp值为
1 0 0 0 0 0 0 (d[0][0]=1)
1 1 0 0 0 0 0
1 1 1 1 0 0 0
1 1 1 2 1 1 1
最终的序列就是题目给出的B序列,把B序列减去每一次dp得到的序列,第一个非0值就是a序列中的值
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define max_n 10010
using namespace std;
int a[max_n], b[max_n], dp[max_n];
//dp[i]表示:和为i的子集个数 int main()
{
// freopen("in.txt","r",stdin);
int t, n, m;
scanf("%d", &t);
while(t--)
{
memset(dp, 0, sizeof(dp));
scanf("%d %d", &n, &m);
for(int i = 0; i <= m; i++)
scanf("%d", &b[i]);
dp[0] = 1; //初始化值
int num = 0;
for(int i = 1; i <= m; i++)
{
int t = b[i] - dp[i];//A序列中值为i的个数
for(int j = 0; j < t; j++)
{
a[num++] = i; //对A序列赋值
for(int k = m; k>= i; k--) //处理成01背包
{
dp[k] += dp[k - i]; //计算和为k的A子集个数
}
}
}
for(int i = 0; i < num; i++)
{
if(i > 0) printf(" ");
printf("%d", a[i]);//输出A序列
}
printf("\n");
}
return 0;
}
hdu 6092 Rikka with Subset 01背包 思维的更多相关文章
- HDU 6092`Rikka with Subset 01背包变形
Rikka with Subset Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- hdu 6092 Rikka with Subset(逆向01背包+思维)
Rikka with Subset Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 6092 Rikka with Subset
Rikka with Subset Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- hdu 6092 Rikka with Subset (集合计数,01背包)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- hdu 6092 Rikka with Subset(多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6092 #include <cstdio> #include <iostream> ...
- HDU 6092 Rikka with Subset(dp)
http://acm.hdu.edu.cn/showproblem.php?pid=6092 题意: 给出两个数组A和B,A数组一共可以有(1<<n)种不同的集合组合,B中则记录了每个数出 ...
- 2017 ACM暑期多校联合训练 - Team 5 1008 HDU 6092 Rikka with Subset (找规律)
题目链接 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, s ...
- HDU 6092:Rikka with Subset(dp)
分析 很多个较小的数字可以随机组合成较大的数字,所以B数组从小到大开始遍历,除了空集,最小的那个存在的个数对应的数字必然是a数组中的数字. 每求出这一部分之后,更新后续的B序列. 分析完后,主要的难点 ...
- HDU 5234 Happy birthday --- 三维01背包
HDU 5234 题目大意:给定n,m,k,以及n*m(n行m列)个数,k为背包容量,从(1,1)开始只能往下走或往右走,求到达(m,n)时能获得的最大价值 解题思路:dp[i][j][k]表示在位置 ...
随机推荐
- Linux性能分析利器——火焰图的安装使用
火焰图(flame graph)是性能分析的利器,通过它可以快速定位性能瓶颈点. perf 命令(performance 的缩写)是 Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的 ...
- 问题解决: PythonStudy 环境搭建
环境搭建的时候遇到问题 参见帖子: http://www.xitongcheng.com/jiaocheng/dnrj_article_24923.html 虚拟机运行的时候会遇到 最近有用户发现在电 ...
- INFJ名言
财富是由什么构成的? 按世俗的观点,就是占有金钱和财宝. 但如果我们用除金钱之外的其他方式来衡量财富, 那么许多在物质上匮乏的人在精神上却是富有的, 许多在物质上富有的人在精神上却是匮乏的. The ...
- redis 处理缓存击穿以及缓存雪崩
缓存击穿 1. 缓存击穿简述 某一个热点数据在缓存中失效,请求穿过redis到达DB,造成DB压力过大 2. 怎么解决缓存击穿 1. 使用redis 作为分布式互斥锁(mutex lock) 实现步骤 ...
- 在Spring Bean实例过程中,如何使用反射和递归处理的Bean属性填充?
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! <Spring 手撸专栏>目录 [x] 第 1 章:开篇介绍,我要带你撸 Spri ...
- jquery 改变标签样式
jQuery改变标签的样式一般有3种 预置好class,然后通过jQuery改变元素的class名,使用的是addClass.removeClass 直接改变元素的css属性值,这种是通过添加styl ...
- mongodb的ObjectId最后三个字节有趣的地方
ObjectId 由12个字节组成,其中组成如下: a 4-byte timestamp value, representing the ObjectId's creation, measured i ...
- 菜鸟刷题路:剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格 class Solution { public String replaceSpace(String s) { StringBuilder str = new St ...
- Boost 矩形布尔运算
本文主要介绍boost库中矩形布尔运算的思路和代码解析.在此感谢Intel对开源事业的贡献. 基本概念 图形的插入 所有的操作的第一步都是进行图形的插入,我们需要声明定义好我们要使用的图形类型,以矩形 ...
- centos 7 能ping通但是telnet 22 不通解决方法
试过关闭Linux防火墙,打开sshd服务,修改ens33为enth0.发现不好使. 经过不断的努力我发现,windows系统里面的VMware Network Adapter VMnet8设置的ip ...