【无码专区12】子集和(背包dp)
此题已自我实现,但仍归于无码专区
本题在考场上就过了,所以难度并不高,发现性质即可。
problem
有 nnn 个正整数 a1,a2,...,ana_1,a_2,...,a_na1,a2,...,an,他们的和为 mmm。你想对于其每一个子集 SSS,求出他们的和。
给定 2n2^n2n 个 [0,m][0,m][0,m] 之间的和,其中数字 iii 出现了 bib_ibi 次。
求还原 aaa,数据保证有唯一解。
n≤50,m≤10000,1s,128MBn\le 50,m\le 10000,1s,128MBn≤50,m≤10000,1s,128MB
my idea
首先就能知道 b0,bmb_0,b_mb0,bm 一定是 111。
马上就发现最小的 aia_iai 是没有能被其他数组合出来的情况的,因为他们全是正数!
所以最小的 bi≠0b_i\neq 0bi=0 的 iii,就意味着 aaa 中原来有 bib_ibi 个 iii。
然后考虑第二小的 bj≠0b_j\neq 0bj=0 的 jjj,会注意到有可能 bib_ibi 个 iii 可能会组合出 jjj。
减去这些组合就是 aaa 中原本有 bj′b_j'bj′ 个 jjj。
发现这就是个背包 dpdpdp 的过程。
容量 mmm,但最多只会背包 nnn 次。
所以跑得很快。
solution
与我的想法相同。
每次找到子集中最小的元素,也就是最小的 bib_ibi 不等于 000 的 iii,然后从背包里删去即可。
删除就是可以理解成逆向执行一下背包中加入元素 xxx 的操作,也就是从小到大,执行 bi−=bi−xb_i-=b_{i-x}bi−=bi−x。
code
#include <bits/stdc++.h>
using namespace std;
#define maxn 55
#define maxm 10005
#define int long long
int n, m, cnt;
int b[maxm], a[maxn], f[maxm];
int c[maxn][maxn];signed main() {freopen( "subset.in", "r", stdin );freopen( "subset.out", "w", stdout );scanf( "%lld %lld", &n, &m );for( int i = 0;i <= n;i ++ ) {c[i][0] = c[i][i] = 1;for( int j = 1;j < i;j ++ )c[i][j] = c[i - 1][j - 1] + c[i - 1][j];}for( int i = 0;i <= m;i ++ ) scanf( "%lld", &b[i] );f[0] = 1;for( int i = 1;i <= m;i ++ ) {b[i] -= f[i];if( ! b[i] ) continue;for( int j = 1;j <= b[i];j ++ ) a[++ cnt] = i;for( int j = m;j;j -- ) {for( int k = 1;k <= b[i];k ++ )if( j < k * i ) break;else f[j] += f[j - k * i] * c[b[i]][k];}}for( int i = 1;i <= n;i ++ ) printf( "%lld ", a[i] );return 0;
}
【无码专区12】子集和(背包dp)相关推荐
- 【无码专区9】序列统计(带权并查集 + 前缀和建边 + dp)
因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...
- 【无码专区13】最小公倍数(线段树)
因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 my idea顾名思义,记录了我的整个思维过程,以及自己部分实现细节口胡,还有期望分数 solution才是dls正解,但是因为只 ...
- 【无码专区11】异或2(结论 / 推式子 + 哈希hash + 大整数高精度 加减乘除重载考察)
本题已自我实现.但仍归于无码专区 problem 求 ∑i=1n−1i⨁(n−i)\sum_{i=1}^{n-1}i\bigoplus (n-i)∑i=1n−1i⨁(n−i). 20%,n≤1e6; ...
- 【无码专区4】幸运数字4(折半搜索+计数+结论)
因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...
- 【无码专区10】第K大查询(双向链表 /主席树+st表)
已自我实现,但还是归入无码专区序列.哈哈哈哈哈 对于my idea部分,我的每一个想法都实现了,可供参考. problem 给定一个 1∼n1\sim n1∼n 的排列和 kkk,求所有 r−l+1≥ ...
- 【无码专区8】三角形二维数点——计数有多少个给定点落在三角形区域内
因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...
- 【无码专区7】括号序列(思维)
因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...
- 【无码专区6】球与盒子(数学线性筛)
因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...
- 【无码专区5】01串(大讨论+构造)
因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...
最新文章
- ios模拟器快捷键操作
- Python打包程序
- Path环境变量的理解以及设置MinGW环境变量
- python学习知识以及就业方向_Python需要学到什么技术 学完可以从事哪些行业
- .fnt 字体不能正常显示
- BackTrack5(BT5)安装教程及BT5支持网卡列表
- i5 10400f和r7 2700x选哪个?
- CHM文档编辑制作及电子书的相关问题 - txfast的日志 - 网易博客 http://txfast.blog.163.com/blog/static/40536042200832065417/
- JDBC+MySQL入门增删改查案例
- mysql数据库设置密码
- 高德地图实现的数据统计切换街景地图
- Python内置函数、匿名函数
- 求不定积分的系列题型(一)
- POJ(8463)-----Stupid cat Doge(openjudge)
- 又来了!10分钟实现微信 “炸屎“大作战
- 百度云PCS调试过程
- 【LaTeX】LaTeX新手入门教程-基础排版
- [10 Jun 2015 ~ 11 Jun 2015] Deep Learning in arxiv
- java时钟课程设计_JAVA课程设计报告电子钟
- 2021年全球及中国卷烟产销量、主营企业经营现状及发展趋势分析[图]
热门文章
- 李国庆离开当当,广东消委会告长隆,智能校服提供定位功能,全球首个5G火车站来了,这就是今天的大新闻...
- 有计算机信号专业吗,计算机医学图像及信号处理
- nashorn js 调用 java_从nashorn(JDK 8 JavaScript引擎)调用char []输入参数调用Java函数?...
- pythonresponse对象的属性_Scrapy中response属性以及内容提取
- html省市区选择器代码,js实现一个省市区三级联动选择框代码分享
- python气象数据处理与绘图_Python气象数据处理与绘图:纬高图的另一种思路
- anaconda和python有什么不一样_黄山毛峰的味道为什么会不一样?
- linux系统故障实验,Linux常见系统故障排除
- php获取昨日时间段内,PHP 获取 特定时间范围 类
- php phpmailer qq邮箱,QQ邮箱利用PHPmailer发送邮件