HDU 3127 WHUgirls

 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 }

 

posted @ 2013-04-09 23:18  OpenSoucre  阅读(170)  评论(0编辑  收藏  举报