HDU6092Rikka with Subset(逆向背包)
来源:互联网 发布:js在线编辑器 编辑:程序博客网 时间:2024/06/15 19:31
题意:
有一个数列 a[] ,长度(n<=50)。b[i] 表示元素和为 i 的集合个数。给你一个数列 b[] ,长度(m<=10000),让你求 a[],并按照其字典序最小输出
题解:
如果 Bi 是 B 数组中除了 B0 以外第一个值不为 0 的位置,那么显然 i 就是 A 中的最小数。
现在需要求出删掉 i 后的 B 数组,过程大概是反向的背包,即从小到大让 Bj−=Bj−i。
时间复杂度 O(nm)。
PS:理解一下之后其实就是一个逆向的多重背包
#include<bits/stdc++.h>using namespace std;#define pii pair<int, int>typedef long long ll;const int maxn = 10105;ll b[maxn];int ans[55];int main(){ int t, n, m; scanf("%d", &t); while(t--) { scanf("%d%d", &n, &m); for(int i = 0; i <= m; i++) scanf("%I64d", &b[i]); int cnt = 0; for(int i = 1; i <= m; i++) { if(b[i] == 0) continue; if(cnt == n) break; ans[cnt++] = i; for(int j = i; j <= m; j++) b[j] -= b[j-i]; i--; } for(int i = 0; i < n; i++) printf("%d%c", ans[i], i == n-1 ? '\n' : ' '); } return 0;}
容易理解点的代码:
#include<bits/stdc++.h>using namespace std;#define pii pair<int, int>typedef long long ll;const int maxn = 10105;ll b[maxn], dp[maxn];int ans[55];int main(){ int t, n, m; scanf("%d", &t); while(t--) { scanf("%d%d", &n, &m); for(int i = 0; i <= m; i++) scanf("%I64d", &b[i]), dp[i] = 0; dp[0] = 1; int cnt = 0; for(int i = 1; i <= m; i++) { int num = b[i] - dp[i]; if(cnt == n) break; for(int j = 0; j < num; j++) { ans[cnt++] = i; for(int k = m; k >= i; k--) dp[k] += dp[k-i]; } } for(int i = 0; i < n; i++) printf("%d%c", ans[i], i == n-1 ? '\n' : ' '); } return 0;}
阅读全文
1 0
- HDU6092Rikka with Subset(逆向背包)
- HDU6092Rikka with Subset(dp)
- hdu6092Rikka with Subset(dp+思维)
- hdu 6092 Rikka with Subset 逆向背包
- hdu 6092 Rikka with Subset(逆向01背包+思维)
- HDU6092-Rikka with Subset(背包)
- Hdu 6092 Rikka with Subset【背包Dp】
- hdu 6092 Rikka with Subset 背包dp
- 【HDU 6092 Rikka with Subset】 思维 & 背包
- HDU6092 Rikka with Subset(01背包+思路)
- hdu 6092 Rikka with Subset(dp背包)
- hdu6092 Rikka with Subset (反向背包)
- HDU 6092 Rikka with Subset (背包 思维)
- HDU 6092 Rikka with Subset 【dp多重背包】【好题】
- HDU 6092 Rikka with Subset (2017多校5-背包)
- hdu 6092 Rikka with Subset【01背包+思维】
- hdu 6092 Rikka with Subset 背包(贪心)
- 2017多校五 1008题 hdu 6092 Rikka with Subset 背包
- 二级域名解析及证书获取
- request常用方法
- com.android.databinding
- 学习一门新语言的12种方法
- volley 的get post 请求
- HDU6092Rikka with Subset(逆向背包)
- Qt控件-按钮组
- 算法训练 阿尔法乘积
- Oracle的卸载
- GPU对CNN计算的加速原理到底是怎样的?
- UrhoSharp Xamarin.Forms 开发入门
- spring boot 教程(五)使用JdbcTemplate访问数据库
- 【更难矩阵取数问题】51nod 1084 矩阵取数问题 V2
- SQL语法学习20170809