zoj 3812 We Need Medicine(01背包)
来源:互联网 发布:python sys.exit 0 编辑:程序博客网 时间:2024/05/16 01:14
题目链接:zoj 3812 We Need Medicine
题目大意:有n中化学成分,每种成分要么选取重量Wi,获得Ti的TEV值,要么不取,获得0的TEV值。现在对于每种病
毒,要求配置质量为Mi的药物,并且TEV值为Si,求化学成分组成。
解题思路:看了别人的题解,以前居然不知道背包转移可以用二进制。
因为质量总共才50,所以用一个long long的二进制数表示说哪些质量是可祖长的,这样的话只要开一个20W的数组
s,s[i]表示说TEV值为i时质量可以为多少。然后每次在用lowbit处理出新增的可能,用dp[i][j]记录路径。
#include <cstdio>#include <cstring>#include <map>#include <algorithm>using namespace std;#define lowbit(x) ((x)&(-x))typedef unsigned long long ull;typedef long long ll;const int maxn = 405;const int maxt = 200000;int N, Q, W[maxn], T[maxn];short dp[maxt + 5][52];map<ll, int> G;ull s[maxt];void init () { scanf("%d%d", &N, &Q); for (int i = 1; i <= N; i++) scanf("%d%d", &W[i], &T[i]); ull bit = (1LL<<51) - 1; memset(s, 0, sizeof(s)); memset(dp, 0, sizeof(dp)); s[0] = 1; for (int i = 1; i <= N; i++) { for (int j = maxt; j >= T[i]; j--) { ull v = s[j]; s[j] |= ((s[j-T[i]]<<W[i]) & bit); for (ll k = s[j]^v; k != 0; k -= lowbit(k)) dp[j][G[lowbit(k)]] = i; } }}int main () { for (int i = 0; i <= 50; i++) G[1LL<<i] = i; int cas; scanf("%d", &cas); while (cas--) { init(); int x, y; while (Q--) { scanf("%d%d", &x, &y); if (dp[y][x]) { int u = dp[y][x]; printf("%d", u); while (u) { y -= T[u]; x -= W[u]; u = dp[y][x]; if (u) printf(" %d", u); } printf("\n"); } else printf("No solution!\n"); } } return 0;}
1 0
- zoj 3812 We Need Medicine(01背包)
- 背包 ZOJ 3812 We Need Medicine
- ZOJ 3812 We Need Medicine 01背包+位优化
- 【ZOJ】3812 We Need Medicine
- ZOJ 3812 We Need Medicine
- zoj 3812 We Need Medicine
- [ZOJ 3812 We Need Medicine] DP
- zoj 3812 We Need Medicine(dp)
- 【DP】 ZOJ 3812 We Need Medicine
- ZOJ 3812 We Need Medicine 状压DP 回溯
- zoj3812 We Need Medicine 背包+位优化
- ZOJ3812--We need Medicine
- ZOJ 3812 We Need Medicine(dp,状态压缩,2014牡丹江网络赛D题)
- ZOJ 3812 We Need Medicine(牡丹江网络赛D题)
- zoj 3812 We Need Medicine (dp 位优化 巧妙记录路径)
- 2014 Mudanjiang Online Contest Problem D We Need Medicine
- Medicine (01多维背包)
- We Need Medicine zoj3812 The 2014 ACM-ICPC Asia Mudanjiang Regional
- linux学习笔记(4)
- sql
- Java_BIO/NIO/AIO
- Android开发规范
- 使用dom4j操作xml
- zoj 3812 We Need Medicine(01背包)
- Android HOME键那些事
- 求空间直线与平面的交点
- OCCI开发时,需要用到PObject类型,如何处理呢?
- Problem A. Seven-segment Display
- 【HEVC学习与研究】35、帧内预测参考数据的获取和滤波处理
- 使用getline函数从文本中一行一行的读字符串
- Web_JavaScript_实现:手机访问网站,自动跳转到其网站手机版;
- 3.9重建二叉树