1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 #include <cstring> 5 6 #define MAX 1001 7 using namespace std; 8 9 struct cloth{ 10 int xi,yi,ci; 11 }; 12 int dp[MAX][MAX]={0}; 13 14 int main(){ 15 int T; 16 cin >> T; 17 while(T--){ 18 int N,X,Y; 19 cin >> N>>X>>Y; 20 vector<cloth> piece(N); 21 for(int i = 0; i < N; i ++ ) 22 cin >> piece[i].xi>>piece[i].yi>>piece[i].ci; 23 // int dp[MAX][MAX]={0}; //不知道为什么把dp放在里面会栈溢出 24 memset(dp,0,sizeof(dp)); 25 for(int i = 1; i <= X; i ++ ){ 26 for(int j = 1; j <= Y; j ++ ){ 27 for(int k = 0; k < N; k ++ ){ 28 int x = piece[k].xi, y = piece[k].yi, c = piece[k].ci; 29 if(i >= x && j >=y ) 30 dp[i][j] = max(dp[i][j],max(dp[i-x][y]+dp[i][j - y],dp[x][j-y]+dp[i-x][j])+c); 31 swap(x,y); 32 if(i >=x && j >= y) 33 dp[i][j] = max(dp[i][j],max(dp[i-x][y]+dp[i][j - y],dp[x][j-y]+dp[i-x][j])+c); 34 } 35 } 36 } 37 cout<<dp[X][Y]<<endl; 38 } 39 return 0; 40 }