POJ 2184 Cow Exhibition [dp 背包]

原创 2012年03月27日 21:31:45

题意:

给定两串数字,有正有服,求出最大和,且这个和的状态下满足任一边都不为负。


思路:

dp。

说是背包,但是其实完全不懂背包的也可以做出来。

本质就是用dp数组来记录状态,然后依次增加状态和更新而已。。

值得注意的就是对负值平移成非负的。


linux环境下vim编辑器a掉的第二道题,很艰难,没少gdb。

强烈意识到要开始改装一下vim成ide了,利其器。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;
const int N=105;
const int ost=100000;
const int inf=(1<<30);
int n,m;
int d[2*ost+5];
struct Node
{
	int s,f;
}a[N];
void solve()
{
	memset(d,0,sizeof(d));
	d[ost]=ost;
	int l=ost,r=ost;
	for(int i=1;i<=n;i++)
	{
		int s=a[i].s;
		int f=a[i].f;
		if(s>0)
		{
			for(int j=r;j>=l;j--)
			{
				if(d[j])
				{
					d[j+s]=Max(d[j]+f,d[j+s]);
					r=Max(r,j+s);
				}
			}
		}
		else
		{
			for(int j=l;j<=r;j++)
			{
				if(d[j])
				{
					d[j+s]=Max(d[j]+f,d[j+s]);
					l=Min(j+s,l);
				}
			}
		}
	}
	int ans=0;
	for(int i=ost;i<=r;i++)
	  if(d[i]&&d[i]>=ost)
	  {
		ans=Max(ans,d[i]+i-2*ost);
	  }
	printf("%d\n",ans);
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&a[i].s,&a[i].f);
	}
	solve();
	return 0;
}


poj1155 TELE(树形dp+背包)

TELE Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4344   Accepted:...
  • d_x_d
  • d_x_d
  • 2015年11月16日 20:06
  • 1511

poj2184 Cow Exhibition(p-01背包的灵活运用)

poj2184 Cow Exhibition(p-01背包的灵活运用)
  • u012860063
  • u012860063
  • 2014年06月24日 20:29
  • 1158

状态压缩dp入门 (poj3254 Corn Fields)

题目链接:http://poj.org/problem?id=3254 题意:给出一个n行m列的草地,1表示肥沃,0表示贫瘠,现在要把一些牛放在肥沃的草地上,但是要求所有牛不能相邻,问你有多...
  • y990041769
  • y990041769
  • 2014年04月28日 19:10
  • 18939

Cow Exhibition POJ - 2184 特殊的01背包,有助于理解dp循环方向

Cow Exhibition POJ - 2184n个物品,每个物品又两个属性s和f,s f∈[-1000,1000],n∈[0, 100]求所有s和f和最大的拿取方案,且所有f的和都大于等于0,所有...
  • litmxs
  • litmxs
  • 2017年02月11日 16:11
  • 157

[POJ 2184]Cow Exhibition[DP][01背包]

题目链接:[POJ 2184]Cow Exhibition[DP][01背包] 题意分析: 有n头牛,每头牛的智商为si,情商为fi,现在要举办一个展览,需要选择一些牛出来,满足这些牛的情商只和不...
  • CatGlory
  • CatGlory
  • 2016年01月15日 19:42
  • 169

POJ2184 Cow Exhibition(DP:变种01背包)

题意: 一群奶牛分别有s和f两个值,要求选出一些奶牛使s与f的和最大并且s和f分别的和不能为负数。 要点: 用dp[i]=j表示当s的和为i时f的和为j,这样最后只要求dp[i]+i的最大值即可。注意...
  • SeasonJoe
  • SeasonJoe
  • 2016年08月07日 21:15
  • 257

POJ 2184 Cow Exhibition (体积为负时01背包的处理+问题转化)

题意:有很多牛,每只牛有一个智商和幽默度,要选出一些牛,智商加幽默度总和最大,其中智商总和和幽默度总和都不能是负数。 mark:变种的01背包,可以把智商看成体积,幽默度看成价值,那么就转换成求体积...
  • u012841845
  • u012841845
  • 2014年01月20日 15:25
  • 777

POJ 2184 Cow Exhibition (处理负值的01背包)

【题目链接】:click here~~ 【思路】:      转化问题,求s和为某个固定值时候最大的f和值,然后遍历这些所有的s和以及对应的f和值,求出总和总和最大的那个。      那么这样就是一个...
  • u013050857
  • u013050857
  • 2015年09月10日 21:05
  • 415

POJ 2184 Cow Exhibition(变形01背包)

题目链接: POJ 2184 Cow Exhibition 题意: 给n头牛,每头牛有两个属性:smart和fun,选出若干头牛使得这些牛的smart和fun之和最大,并且smart和与fun和...
  • Ramay7
  • Ramay7
  • 2016年04月13日 14:45
  • 170

poj 2184 - Cow Exhibition (01背包) 解题报告

Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10279  ...
  • Luwhere
  • Luwhere
  • 2015年07月31日 21:52
  • 595
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 2184 Cow Exhibition [dp 背包]
举报原因:
原因补充:

(最多只允许输入30个字)