HDU 6092:Rikka with Subset(dp)
分析
很多个较小的数字可以随机组合成较大的数字,所以B数组从小到大开始遍历,除了空集,最小的那个存在的个数对应的数字必然是a数组中的数字。
每求出这一部分之后,更新后续的B序列。
分析完后,主要的难点就是怎么去让已求出来的A序列随机组合,更新后续的B序列直接减就可以了。看成01背包问题,让m为背包去装 i,初始值为dp[0] = 1,由于i依次增大,A子集随机组合不会重复。
dp[i]表示A序列中值为i的次数, 每次用第i个数的次数去更新i+1~m的dp值即可
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
int t,n,m;
ll b[10010];
int a[55];
int dp[10010];
int main()
{
    for(scanf("%d",&t);t--;)
    {
        scanf("%d %d",&n,&m);
        F(i,0,m) scanf("%I64d",b+i);
        mem(dp,0);
        dp[0]=1;
        int pos=0;
        F(i,1,m)
        {
            int temp=b[i]-dp[i];
            for(int j=1;j<=temp;++j)
            {
                a[++pos]=i;
                for(int k=m;k>=i;--k) dp[k]+=dp[k-i];
            }
        }
        F(i,1,pos) printf("%d%c",a[i],i==pos?'\n':' ' );
    }
    return 0;
}
												
											HDU 6092:Rikka with Subset(dp)的更多相关文章
- 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背包+思维)
		
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(dp)
		
http://acm.hdu.edu.cn/showproblem.php?pid=6092 题意: 给出两个数组A和B,A数组一共可以有(1<<n)种不同的集合组合,B中则记录了每个数出 ...
 - hdu 6092 Rikka with Subset(多重背包)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6092 #include <cstdio> #include <iostream> ...
 - 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 (集合计数,01背包)
		
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
 - 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值 ...
 - HDU 5829 Rikka with Subset
		
快速数论变换ntt. 早上才刚刚接触了一下FFT,然后就开始撸这题了,所以要详细地记录一下. 看了这篇巨巨的博客才慢慢领会的:http://blog.csdn.net/cqu_hyx/article/ ...
 
随机推荐
- SQL经常使用语法
			
一.基础 1.创建数据库 CREATE DATABASE database-name 2.删除数据库 drop database dbname 3.备份sql server --- 创建 备份数据的 ...
 - react 创建组件 (一)createClass
			
如果你还没有使用ES6语法,那么定义组件,只能使用React.createClass这个helper来创建组件,下面是一段示例: var React = require("react&quo ...
 - weex  阶段总结
			
新年伊始,回顾过去的一年,收获很多,之前一直在研究weex,说心里话感觉心好累,官方文档不全,社区不活跃,遇到很多坑,官方发布的版本有时都有坑,搞得我都不敢更新版本了. 但是,研究了这么久,放弃太可惜 ...
 - 【算法编程】找出仅仅出现一次的数-singleNumber
			
题目意思: 一个数值数组中,大部分的数值出现两次,仅仅有一个数值仅仅出现过一次,求编程求出该数字. 要求,时间复杂度为线性,空间复杂度为O(1). 解题思路: 1.先排序.后查找. 因为排序的最快时间 ...
 - Intel processor brand names-Xeon,Core,Pentium,Celeron----Atom
			
http://en.wikipedia.org/wiki/Intel_atom Intel Atom From Wikipedia, the free encyclopedia (Redirect ...
 - Firefox OS开发指南
			
在海外社区Leanpub上线了<Firefox OS App开发>高速指南,指引开发人员尝试新技术. 这款<Firefox OS App开发>高速指南现已开放下载.HTML5开 ...
 - Linux fork函数具体图解-同一时候分析一道腾讯笔试题
			
原创blog.转载请注明出处 头文件: #include<unistd.h> #include<sys/types.h> 函数原型: pid_t fork( void); (p ...
 - HDU 6155 Subsequence Count 线段树维护矩阵
			
Subsequence Count Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Oth ...
 - 大整数分解质因数(Pollard rho算法)
			
#include <iostream> #include <cstring> #include <cstdlib> #include <stdio.h> ...
 - 计算机学院大学生程序设计竞赛(2015’12)01 Matrix
			
01 Matrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...