点击打开链接链接
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 9288 | Accepted: 3551 |
Description
Input
Output
Sample Input
5 -5 7 8 -6 6 -3 2 1 -8 -5
Sample Output
8
Hint
给出每头牛的s和f 要挑出几头牛
要求ts和tf的和最大
切ts和tf不能为负
dp[i]代表ts-100000为i时tf的最大值
因为有负数 所以以100000为起点 i<100000时代表ts<0
#include<cstdio>
#include<cstring>
#define INF 0x3f3f3f3f
int maxn(int a,int b)
{
return a>b?a:b;
}
int dp[211111];
int main()
{
int n,i,j,s[110],f[110];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d %d",&s[i],&f[i]);
for(i=0;i<=200000;i++)
dp[i]=-INF;
dp[100000]=0;
for(i=0;i<n;i++)
{
if(s[i]>=0)
{
for(j=200000;j>=s[i];j--)
{
dp[j]=maxn(dp[j],dp[j-s[i]]+f[i]);
}
}
else
{
for(j=s[i];j<=200000+s[i];j++)
{
dp[j]=maxn(dp[j],dp[j-s[i]]+f[i]);
}
}
}
int ans=0;
for(i=100000;i<=200000;i++)
{
if(dp[i]>0)
ans=maxn(ans,i-100000+dp[i]);
}
printf("%d\n",ans);
}
return 0;
}
poj 2184 Cow Exhibition 01背包变形
原文:http://blog.csdn.net/qq_16843991/article/details/40402935