想到了用背包 一开始没想到怎么做,后来又因为细节出错了。。
应该用在每个状态将每种布快形状都先考虑放入,这样可以保证之后的状态可以是从之前最优的推出。。如果换个写法就不行了
#include#include #include #include #include #include #include using namespace std;int dp[1105][1105];struct TH{ int x, y, c;} th[25];int main(){ int i, j, k, T, n, x, y, a, b, c; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&x,&y); for(i=0; i<=x; i++) for(j=0; j<=y; j++) dp[i][j]=0; for(k=0; k =a&&j>=b) { dp[i][j]=max(dp[i][j],max(dp[i-a][j]+dp[a][j-b],dp[i][j-b]+dp[i-a][b])+c); } swap(a,b); if(i>=a&&j>=b) { dp[i][j]=max(dp[i][j],max(dp[i-a][j]+dp[a][j-b],dp[i][j-b]+dp[i-a][b])+c); } } } printf("%d\n",dp[x][y]); } return 0;}