Cow Exhibition POJ - 2184
题目地址: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的更多相关文章
- DP:Cow Exhibition(POJ 2184)(二维问题转01背包)
牛的展览会 题目大意:Bessie要选一些牛参加展览,这些牛有两个属性,funness和smartness,现在要你求出怎么选,可以使所有牛的smartness和funness的最大,并且这两 ...
- [POJ 2184]--Cow Exhibition(0-1背包变形)
题目链接:http://poj.org/problem?id=2184 Cow Exhibition Time Limit: 1000MS Memory Limit: 65536K Total S ...
- POJ 2184 Cow Exhibition【01背包+负数(经典)】
POJ-2184 [题意]: 有n头牛,每头牛有自己的聪明值和幽默值,选出几头牛使得选出牛的聪明值总和大于0.幽默值总和大于0,求聪明值和幽默值总和相加最大为多少. [分析]:变种的01背包,可以把幽 ...
- POJ 2184 Cow Exhibition (01背包变形)(或者搜索)
Cow Exhibition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10342 Accepted: 4048 D ...
- poj 2184 Cow Exhibition(01背包)
Cow Exhibition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10882 Accepted: 4309 D ...
- poj 2184 01背包变形【背包dp】
POJ 2184 Cow Exhibition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14657 Accepte ...
- POJ2184 Cow Exhibition[DP 状态负值]
Cow Exhibition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12420 Accepted: 4964 D ...
- POJ 2184 01背包+负数处理
Cow Exhibition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10200 Accepted: 3977 D ...
- Cow Exhibition 变种背包
Cow Exhibition Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Subm ...
随机推荐
- 零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下)
原文:零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下) 你可以把Clip想成是一个遮罩,运用遮罩达到我们想要的效果 所以在这里我们把文字 ...
- Android零基础入门第24节:自定义View简单使用
原文:Android零基础入门第24节:自定义View简单使用 当我们开发中遇到Android原生的组件无法满足需求时,这时候就应该自定义View来满足这些特殊的组件需求. 一.概述 很多初入Andr ...
- windows 2003 无法安装 .net4.0 windows服务
错误: InstallUtil.InstallLog文件中的错误信息: 正在运行事务处理安装. 正在开始安装的“安装”阶段. 查看日志文件的内容以获得 D:\Debug\DataChang.e ...
- c#透明panel
先看下效果 纯透明的pane,然后设置一个半透明的图片,可以看出来显示了父控件的button 看代码 public partial class PanelEx : Panel { protected ...
- 每天进步一点--WCF学习笔记
最近买了一本书WCF服务编程,重头再开始了解学习WCF,现将学习记录,以便后来复习,也希望和大家一起进步. WCF用终结点表示一种组成关系,终结点就是地址.契约与绑定的混合品,即 地址(Address ...
- wangjie.rocks的静态编译Qt,openssl,icu
http://wangjie.rocks/2015/12/28/compile-qt/http://wangjie.rocks/2015/12/10/compile-icu/http://wangji ...
- 在Linux中如何利用backtrace信息解决问题
在Linux中如何利用backtrace信息解决问题 一.导读 在程序调试过程中如果遇到程序崩溃死机的情况下我们通常多是通过出问题时的栈信息来找到出错的地方,这一点我们在调试一些高级编程语言程序的时候 ...
- vmware linux虚拟机忘记密码怎么办
你又忘了root密码??? 针对好多好多同学经常忘记root密码...这里给你整理怎么重置root密码!! 重启 Linux 系统主机并出现引导界面时,按下键盘上的 e 键进入内核编辑界面 在 lin ...
- C语言实现常用数据结构——链表
#include<stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node *next; ...
- hadoop之hive基本操作
-- 清空表中的数据,保留表结构 truncate table tmp_userid; '); -- 搜索库或表支持正则表达式 show tables 'sa*'; show tables in ba ...