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,且隨機的在一行...