题目链接:
对于一个小矩形,有两种切割方式(上下):1、在xx上切x,在yy上切y;2、在xx上切y,在yy上切x
故有:
1、在xx上切x,在yy上切y;
dp[i][j]=max(dp[i][j],max(dp[x][j-y]+dp[i-x][j],dp[i][j-y]+dp[i-x][y])+value);
2、在xx上切y,在yy上切x
dp[i][j]=max(dp[i][j],max(dp[y][j-x]+dp[i-y][j],dp[i][j-x]+dp[i-y][x])+value);
其中dp[i][j]表示(0,0)到(i,j)切出小矩阵的价值和;
View Code
1 #include2 const int N=1010; 3 using namespace std; 4 5 struct Node{ 6 int x,y; 7 int value; 8 }node[N]; 9 int dp[N][N];10 11 int main(){12 int _case;13 scanf("%d",&_case);14 while(_case--){15 int N,X,Y;16 scanf("%d%d%d",&N,&X,&Y);17 for(int i=0;i