hdoj1584 蜘蛛牌 (區間型動態規劃)

2022-05-29 04:06:15 字數 971 閱讀 7993

hdoj1584

分析:f[i][j] 表示 把一串牌 牌 i 到 j 摞為一摞時 所花費最少的步數。

d[i][j] 表示把牌 i 挪到牌 j 上時需要走的步數(最初給的狀態)。

以一串牌 3~8 為例, 我們需要把牌 3 放到牌 4 上 , 而在最優的移動方案下, 牌 4 的位置不確定, 所以我們列舉牌 4 所在的位置(因為一共10張牌, 列舉是可以的) 。 得出狀態轉移方程 :f[3][8] = min(f[3][8], f[4][k] + f[k][8] + d[3][k]); ( 4 <= k <= 8)f[i][j] = min (f[i][j], f[i+1][k] + f[k][j] + d[i][k]);

舉個例子: 牌的初始順序為 1, 4, 6, 8, 3, 2, 5, 7, 9, 10 

求f[1][4] 時。 最有順序應該是 :先把牌 2 移到 牌 3 上, 把牌 2~3 移到牌 4 上。 最後 把牌 1 移到 牌 2 上。 而此時牌 2 已經在 牌4 的位置上了(f[1][4] = f[2][4] + f[4][4] +  d[1][4] = 5)。

#include#include

#include

#include

#include

#include

using

namespace

std;

int t, a[15], d[15][15], f[15][15

];void

dp()

}}void

init()

}}int

main()

}init();

dp();

printf(

"%d\n

", f[1][10

]); }

return0;

}

HDU1584 蜘蛛牌(區間dp)

蜘蛛牌是windows xp作業系統自帶的一款紙牌遊戲,遊戲規則是這樣的 只能將牌拖到比她大一的牌上面 a最小,k最大 如果拖動的牌上有按順序排好的牌時,那麼這些牌也跟著一起移動,遊戲的目的是將所有的牌按同一花色從小到大排好,為了簡單起見,我們的遊戲只有同一花色的10張牌,從a到10,且隨機的在一行...

HDU1584 蜘蛛牌(區間dp)(c )

蜘蛛牌 蜘蛛牌是windows xp作業系統自帶的一款紙牌遊戲,遊戲規則是這樣的 只能將牌拖到比她大一的牌上面 a最小,k最大 如果拖動的牌上有按順序排好的牌時,那麼這些牌也跟著一起移動,遊戲的目的是將所有的牌按同一花色從小到大排好,為了簡單起見,我們的遊戲只有同一花色的10張牌,從a到10,且隨機...

杭電1584 蜘蛛牌

蜘蛛牌是windows xp作業系統自帶的一款紙牌遊戲,遊戲規則是這樣的 只能將牌拖到比她大一的牌上面 a最小,k最大 如果拖動的牌上有按順序排好的牌時,那麼這些牌也跟著一起移動,遊戲的目的是將所有的牌按同一花色從小到大排好,為了簡單起見,我們的遊戲只有同一花色的10張牌,從a到10,且隨機的在一行...