题目地址:https://vjudge.net/problem/POJ-2184

下面的解释是从一个大佬那搬来的,讲的很清楚
题意:给定一些奶牛,每个牛有s和f两个属性值,有正有负,要求选出一些牛,
使得这些牛的两种属性的和的加和最大,且这些牛的两种属性分别求加和不能为负。
分析:dp,开始想到dp[i][s][f],表示前i头牛能否实现属性和分别为s, f。空间和时间都不允许,
要将f从状态中拿出來,让f的属性和作为所求的值。即变为d[i][s] = f的形式。
表示用前i头牛构成s属性和为s的情况下f属性和最大为多少。状态转移从两种情况来,即用或者不用当前的牛。
dp[i][j] = max(dp[i - 1][j - s[i]] + f[i], dp[i - 1][j])。在实际操作的时候可以将第一维去掉,进行空间上的优化。
但是由于s[i]的值有正有负,所以在填写数组的顺序要根据s[i]的值来决定,
若为正则从右到左(类似01背包的空间优化),若为负则从左到右。
注意:动态规划中状态维和值是可以相互转化的。状态维过多,效率低的时候,
可以把将其转化为数组值;同理,数组值不唯一无法规划时,可以增加状态维使状态更详细


 #include<iostream>
 #include<algorithm>
using namespace std;
#define rep(i,j,k) for(int i = (j); i <= (k); i++)
#define per(i,j,k) for(int i = (j); i >= (k); i--)
#define mv (int)1e5
#define N 105
#define inf (1LL << 30) - 1
#define maxn (int)2e5 + 10 int dp[maxn];
int s[N], f[N];
int n; void input(){ rep(i, , maxn - ) dp[i] = -inf; cin >> n;
rep(i, , n) cin >> s[i] >> f[i];
} void work(){ dp[ + mv] = ; rep(i, , n){
if (s[i] > ){
per(o, (int)1e5, (int)(-1e5 + s[i]))
dp[o + mv] = max(dp[o + mv], dp[o - s[i] + mv] + f[i]);
}
else{
rep(o, (int)-1e5, (int)(1e5 + s[i]))
dp[o + mv] = max(dp[o + mv], dp[o - s[i] + mv] + f[i]);
}
} int ans = ;
rep(i, , (int)1e5){
if (dp[i + mv] >= ) ans = max(ans, i + dp[i + mv]);
} cout << ans << endl;
} int main(){ ios::sync_with_stdio(false);
cin.tie();
input();
work(); return ;
}

Cow Exhibition POJ - 2184的更多相关文章

  1. DP:Cow Exhibition(POJ 2184)(二维问题转01背包)

        牛的展览会 题目大意:Bessie要选一些牛参加展览,这些牛有两个属性,funness和smartness,现在要你求出怎么选,可以使所有牛的smartness和funness的最大,并且这两 ...

  2. [POJ 2184]--Cow Exhibition(0-1背包变形)

    题目链接:http://poj.org/problem?id=2184 Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  3. POJ 2184 Cow Exhibition【01背包+负数(经典)】

    POJ-2184 [题意]: 有n头牛,每头牛有自己的聪明值和幽默值,选出几头牛使得选出牛的聪明值总和大于0.幽默值总和大于0,求聪明值和幽默值总和相加最大为多少. [分析]:变种的01背包,可以把幽 ...

  4. POJ 2184 Cow Exhibition (01背包变形)(或者搜索)

    Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10342   Accepted: 4048 D ...

  5. poj 2184 Cow Exhibition(01背包)

    Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10882   Accepted: 4309 D ...

  6. poj 2184 01背包变形【背包dp】

    POJ 2184 Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14657   Accepte ...

  7. POJ2184 Cow Exhibition[DP 状态负值]

    Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12420   Accepted: 4964 D ...

  8. POJ 2184 01背包+负数处理

    Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10200   Accepted: 3977 D ...

  9. Cow Exhibition 变种背包

    Cow Exhibition Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

随机推荐

  1. JS enter代替tab,只有部分键可以代替

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  2. WPF 打印不显示的元素

    <Window x:Class="_097打印不显示的元素.MainWindow"        xmlns="http://schemas.microsoft.c ...

  3. javascript真假(true/false)值

    下面列出的值被当做假(false): false null undefined 空字符串 ' ' 数字 0 数字 NaN $(document).ready(function(){ var array ...

  4. Win10《芒果TV》商店版更新v3.2.7:修复下载任务和会员下载权限异常

    在第89届奥斯卡颁奖典礼,<爱乐之城>摘获最佳导演.女主.摄影等六项大奖,<月光男孩>爆冷获最佳影片之际,Win10版<芒果TV>迅速更新至v3.2.7,主要是修复 ...

  5. LINQ查询表达式---------let子句

    LINQ查询表达式---------let子句 let子句创建一个范围变量来存储结果,变量被创建后,不能修改或把其他表达式的结果重新赋值给它.此范围变量可以再后续的LINQ子句中使用. class P ...

  6. 零元学Expression Blend 4 - Chapter 11 用实例了解布局容器系列-「Border」

    原文:零元学Expression Blend 4 - Chapter 11 用实例了解布局容器系列-「Border」 将教大家以实做案例认识Blend 4 的布局容器,此章介绍的布局容器是Blend ...

  7. mysqldump数据库备份与恢复

    mysqldump -u 用户名 -p 数据库名> 备份的文件名 本文中因服务器为多实例,所以在执行登陆等命令时指定了-S参数,即指定其中一个数据库 备份: mysqldump -u root ...

  8. UWP入门(一) -- 先写几个简单控件简单熟悉下(别看这个)

    原文:UWP入门(一) -- 先写几个简单控件简单熟悉下(别看这个) 1. MainPage.xmal <Grid Background="{ThemeResource Applica ...

  9. hadoop(三)

    hadoop(三) 1.对MapReduce的认识   MapReduce是运行在yarn上面的一个分布式运算框架,它是用来解决海量的分布式运算的.对于MapReduce来说,我们可以把它分成两部分来 ...

  10. 怎样让窗口不显示在任务栏和ALT+TAB中(隐藏窗口再嵌套,几乎是万能的办法)

    之前想弄个像QQ旋风那样的悬浮窗口,就研究了下怎么让窗口不显示在任务栏中,方法其实很简单就是将窗口的扩张属性设置成WS_EX_TOOLWINDOW,MSDN中对该属性有详细介绍,代码如下: ::Set ...