题目:
http://acm.hdu.edu.cn/showproblem.php?pid=4501
代码:
#include<stdio.h>
#include<string>
int n,v1,v2,k;
int a[105],b[105],val[105];
int dp[105][105][105][6];
int max(int a,int b)
{
if(a>b) return a;
else return b;
}
int main()
{
while(~scanf("%d%d%d%d",&n,&v1,&v2,&k))
{
int i,j,p,q;
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&a[i],&b[i],&val[i]);
}
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
for(j=v1;j>=0;j--)
{
for(p=v2;p>=0;p--)
{
for(q=k;q>=0;q--)
{
dp[i][j][p][q]=dp[i-1][j][p][q];
if(j>=a[i])
{
dp[i][j][p][q]=max(dp[i][j][p][q],dp[i-1][j-a[i]][p][q]+val[i]);
}
if(p>=b[i])
{
dp[i][j][p][q]=max(dp[i][j][p][q],dp[i-1][j][p-b[i]][q]+val[i]);
}
if(q>=1)
{
dp[i][j][p][q]=max(dp[i][j][p][q],dp[i-1][j][p][q-1]+val[i]);
}
}
}
}
}
printf("%d\n",dp[n][v1][v2][k]);
}
return 0;
}