多维背包,看别人代码才能写出来啊!有点悲剧……
#include <iostream>
using namespace std;
int dp[105][105][105];
struct node
{
int a,b,val;
};
int main()
{
int i,j,l,e,kk,n,v1,v2;
node job[105];
while(cin>>n>>v1>>v2>>kk)
{
for(i=0;i<n;i++)
{
cin>>job[i].a>>job[i].b>>job[i].val;
}
memset(dp,0,sizeof(dp));
int temp;
for(i=0;i<n;i++)
{
for(j=v1;j>=0;j--)
{
for(l=v2;l>=0;l--)
{
for(e=kk;e>=0;e--)
{
temp=0;
if(j-job[i].a>=0)
temp=temp>dp[j-job[i].a][l][e]+job[i].val?temp:dp[j-job[i].a][l][e]+job[i].val;
if(l-job[i].b>=0)
temp=temp>dp[j][l-job[i].b][e]+job[i].val?temp:dp[j][l-job[i].b][e]+job[i].val;
if(e-1>=0)
temp=temp>dp[j][l][e-1]+job[i].val?temp:dp[j][l][e-1]+job[i].val;
dp[j][l][e]=dp[j][l][e]>temp?dp[j][l][e]:temp;
}
}
}
}
cout<<dp[v1][v2][kk]<<endl;
}
return 0;
}