题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3127
参考代码来源:http://blog.csdn.net/lulipeng_cpp/article/details/7587465
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cctype>
#include<iomanip>
using namespace std;
const int maxn=1000+5;
int x[15];
int y[15];
int v[15];
int dp[maxn][maxn];
int main(){
int T; cin>>T;
while(T--){
int n,X,Y; cin>>n>>X>>Y;
for(int i=0;i<n;++i)
cin>>x[i]>>y[i]>>v[i];
memset(dp,0,sizeof(dp));
for(int i=0;i<=X;++i)
for(int j=0;j<=Y;++j)
for(int k=0;k<n;++k){
if(i>=x[k]&&j>=y[k]){
int p=max((dp[i-x[k]][j]+dp[x[k]][j-y[k]]),(dp[i][j-y[k]]+dp[i-x[k]][y[k]]) );
dp[i][j]=max((p+v[k]),dp[i][j]);
}
if(j>=x[k]&&i>=y[k]){
int p=max((dp[i-y[k]][j]+dp[y[k]][j-x[k]]),(dp[i][j-x[k]]+dp[i-y[k]][x[k]]) );
dp[i][j]=max((p+v[k]),dp[i][j]);
}
}
cout<<dp[X][Y]<<endl;
}
return 0;
}