杭电4501
#include<iostream> using namespace std; #define Max(a,b)(a>b?a:b) int arry[101][1001][6]; int as[101], bs[101],cs[101]; int main() { int n,v1,v2,k; while(cin>>n>>v1>>v2>>k) { memset(as,0,sizeof(as)); memset(bs,0,sizeof(bs)); memset(cs,0,sizeof(cs)); memset(arry,0,sizeof(arry)); for(int i=0;i<n;i++) cin>>as[i]>>bs[i]>>cs[i]; for(int i=0;i<n;i++) for(int ii=v1;ii>=0;ii--) for(int jj=v2;jj>=0;jj--) for(int kk=k;kk>=0;kk--) { int temp=0; if(ii>=as[i]) temp=max(temp,arry[ii-as[i]][jj][kk]+cs[i]); if(jj>=bs[i]) temp=max(temp,arry[ii][jj-bs[i]][kk]+cs[i]); if(kk>=1) temp=max(temp,arry[ii][jj][kk-1]+cs[i]); arry[ii][jj][kk]=max(temp,arry[ii][jj][kk]); } cout<<arry[v1][v2][k]<<endl; } return 0; }