题目链接http://acm.h
#include<stdio.h>
#include<string.h>
#define max(a,b) a>b?a:b
int dp[101][101][101][6];
int main()
{
int n,v1,v2,k,i,j,l,p,a,b,c,m1,m2,m3;
while(scanf("%d %d %d %d",&n,&v1,&v2,&k)!=EOF)
{
memset(dp,0,sizeof(dp));
int ans=0;
for(l=1;l<=n;l++)
{
scanf("%d %d %d",&a,&b,&c);
for(i=0;i<=v1;i++)
for(j=0;j<=v2;j++)
for(p=0;p<=k;p++)
{
dp[l][i][j][p]=dp[l-1][i][j][p];//要把上一次的当前位置复制过来
//01背包的一维指的是自己本身,则不要这个过程。01背包二维也有这个过程的
if(i-a>=0) dp[l][i][j][p]=max(dp[l][i][j][p],dp[l-1][i-a][j][p]+c);
if(j-b>=0) dp[l][i][j][p]=max(dp[l][i][j][p],dp[l-1][i][j-b][p]+c);
if(p>0) dp[l][i][j][p]=max(dp[l][i][j][p],dp[l-1][i][j][p-1]+c);
//三个if语句可以随便放
ans=max(ans,dp[l][i][j][p]);
}
}
printf("%d\n",ans);
}
return 0;
}
du.edu.cn/showproblem.php?pid=4501