對於乙個小矩形,有兩種切割方式(上下):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)切出小矩陣的價值和;
1 #include2const
int n=1010;3
using
namespace
std;45
struct
nodenode[n];
9int
dp[n][n];
1011
intmain()
20 memset(dp,0,sizeof
(dp));
21for(int i=1;i<=x;i++)
27if(node[k].x<=j&&node[k].y<=i)30}
31}32}
33 printf("
%d\n
",dp[x][y]);34}
35return0;
36 }
HDU 3127 完全揹包
題目大意 乙個大矩形,要你分割成小矩形 只能水平和豎直切割 每個小矩形都有乙個價值,問如何分割能得到最大總價值。解題思路 完全揹包思想,列舉所有可能情況。對於列舉每個小矩形都可以橫放豎放兩種情況。對於每種情況都有兩種切割方式 橫向切割或者豎向切割。1 include 2 include 3 incl...
HDU 3127 WHUgirls(二維揹包)
有一塊x y的布,可以裁剪成n種不同的小碎步布,剪成xi yi的碎布可以獲得wi元,問將這塊布剪成小碎布最多能獲得多少錢?只能橫著剪或者豎著剪,不能從中間摳出一塊 二維dp,dp j k 表示j k的布剪成小碎布最多能得到多少錢,j k可以由三個小長方形組成 這裡有切割方式 1 xi yi j k ...
HDU 3127 WHUgirls 二維完全揹包
題意 給出乙個長為a,寬為b的布,再給出n個圍巾的規格 長x,寬y,價值c 問怎樣裁剪能夠得到最大的價值。第一次做的時候不會 然後放到今天做 發現還是不會 於是又 看題解了 因為相同規格的圍巾可以重複剪多次,且圍巾的長和寬相當於兩個約束,所以可以轉換為二維費用的完全揹包問題。然後就是圍巾的裁剪 第一...