soj 2142: Cow Exhibition(01背包的变形)
来源:互联网 发布:linux socket close 编辑:程序博客网 时间:2024/06/07 06:21
@(K ACMer)
题意:
有n个物品,他们有两个属性,聪明值和有趣值,选择他们中的一些物品让聪明值和有趣值的和最大且聪明值或者有趣值的和不能为负数.
分析:
这个问题的精华在于讲原问题,转化为等价问题:
转移方程如下:
但是这里有一点当s[j]为负数的时候我们就应该用相反的转移顺序.因为为负数的时候它是由它右边的状态转移而来,如果我们还是和正数一样从右到左的转移顺序,就成了完全背包了.
#include <cstdio>#include <iostream>#include <cstring>#include <cstdlib>#include <string>#include <vector>#include <set>#include <map>#include <queue>#include <algorithm>using namespace std;const int maxn = 3e5, INF = 0x3fffffff, mod = 1e9 + 7;int dp[maxn], s[111], f[111];int n, ma, mi;#define mid int(1e5 + 5e4)int main(void ){ while (~scanf("%d", &n)) { mi = ma = 0; for (int i = 1; i <= n; i++) { scanf("%d%d", &s[i], &f[i]); if (s[i] <= 0 && f[i] <= 0) i--, n--; else if (s[i] > 0) ma += s[i]; else mi += s[i]; } for (int i = mid + mi - 1111; i <= mid + ma + 1111; i++) dp[i] = -INF; dp[0 + mid] = 0; for (int i = 1; i <= n; i++) { if (s[i] >= 0) for (int j = ma + mid; j >= mid + mi; j--) { dp[j] = max(dp[j], dp[j - s[i]] + f[i]); } else for (int j = mi + mid; j <= mid + ma; j++) { dp[j] = max(dp[j], dp[j - s[i]] + f[i]); } } int ans = 0; for (int i = mid; i <= mid + ma; i++) if (dp[i] >= 0) ans = max(ans, dp[i] + i - mid); printf("%d\n", ans); } return 0;}
1 0
- soj 2142: Cow Exhibition(01背包的变形)
- SOJ 2142 Cow Exhibition
- SOJ 2142 Cow Exhibition
- POJ 2184 Cow Exhibition 01背包的变形
- poj 2184 Cow Exhibition (变形的01背包)
- poj2184 Cow Exhibition 01背包 变形
- POJ 2184 Cow Exhibition ( 01背包变形 )
- poj 2184 Cow Exhibition(01背包变形)
- POJ 2184 Cow Exhibition(01背包变形)
- poj 2184 Cow Exhibition 01背包变形
- POJ-2184-01背包变形-Cow Exhibition
- POJ2184---Cow Exhibition(01背包变形)
- POJ 2184Cow Exhibition(01背包变形)
- POJ-2184 Cow Exhibition(01背包变形)
- Poj 2184 Cow Exhibition【01背包 变形】
- NYOJ 2184 Cow Exhibition(01背包+变形)
- POJ 2184 Cow Exhibition 01 背包变形
- Cow Exhibition (01 背包变形)
- jstack分析cpu占用100%
- 关系数据库 OMRLite
- mac 终端svn命令
- 批处教程 for /f 中的Delims和Tokens总结
- 产品经理手册(原书第4版)——互动出版网
- soj 2142: Cow Exhibition(01背包的变形)
- android kernel 源码 分析
- android webview加载/data/data/pkg/files/目录下html文件
- const和指针
- 实现页面从右往左侧滑入效果
- jdk高版本切换低版本之后,版本号不变,解决办法
- Activity得到当前fragment实例
- HDU 2888 Check Corners【二维RMQ】
- 理解dp,px和手机尺寸