【題意】給了一根長度為l的木棍,另外給了一些要切的點的座標,可以把這個木棍理解為橫座標軸,每個能切割的地方的都有固定的座標。現在要求你把這個木棍按照切割位置切割,每次切割消耗的能量就是當前木棍的長度。現在要你選擇如何切割,使得消耗最小。
【解題思路】區間dp.
【狀態表示】dp[i][j]表示從i到j這個區間的最小花費。
【狀態轉移】dp[i][j] = min(dp[i][j],dp[i][k]+dp[k][j]+num[j]-num[i]);
【ac**】
#include #include #include #include using namespace std;
const int maxn = 100;
int dp[maxn][maxn];
int num[maxn];
int main()
int i,j;
num[0]=0,num[n+1]=l;
memset(dp,0,sizeof(dp));
for(int p=1; p<=n+1; p++)
{for(i=0; i<=n+1; i++)
{j=i+p;
int minn=1000000007;
if(j>n+1)break;
for(int k=i+1; k
切木棍 UVA 10003 區間DP
題目大意 有一根長為n的木棍,截一次木棍的代價為這個木棍的長度,現在知道要在這個木棍的 切割,問你最小的代價是多少 解題思路 寫的時候沒有看出來是個區間dp dp i j 代表的是在第i個切割點和第j個切割點之間切割的最小代價 那麼 dp i j min minn,dp i k dp j r a j...
uva10003 有點迷糊的思考
思路 這題跟矩陣鏈乘的思路一樣,所以還是很好考慮的,只是有一點需要加兩個切割點 如下 求最優的切割順序 最優子結構 dp i j 從i刀到j刀的最優切割順序 子問題 哪一刀最後切,dp i k dp k j i include includeusing namespace std define ma...
動態規劃練習 UVa10003 區間dp
紫書上的動態規劃例題,很明顯是乙個區間線性規劃的問題,想起之前做過的矩陣鏈乘,這題和它很像,列舉方向都是向j i遞增的 方向,這裡有個大神的區間dp模板的總結 可以強化理解。所以,設dp i j 為切割小木棍i j點的費用,則dp i j min,a j a i 表示第一刀切割為i j的費用,而 d...