難度等級:**
輸入描述 input description
第一行n,表示有n個時刻 1<=n<=10000
第二到n+1行,每行乙個數,表示需要踩得版
輸出描述 output description
乙個數,最小消耗體力
樣例輸入 sample input
樣例輸出 sample output
資料範圍及提示 data size & hint
n<=10000
f[i][l][r]表示踩了i步,第i步左腳踩在l,右腳踩在r的最小消耗體力
初始化:f極大值
特殊處理:第1步規定左腳踩,左腳踩到直到出現與第乙個不同的箭頭,換右腳踩第一步
狀態轉移:設第i步踩在x
f[i][l][r]=min(f[i-1][x][r]+move[l][x])
f[i][l][r]=min(f[i-1][l][r]+move[r][x])
第一次**,沒有預處理move陣列,**冗長,判斷移動消耗多少體力時老出錯
#include#include#include
using
namespace
std;
int n,f[10001][5][5],y,ans=50000
;int work(int i,int l,int r,int self,int left,int right,int now_l,int now_r,int
p)int
main()
if(a)
continue
; }
for(int l=1;l<=4;l++)
for(int r=1;r<=4;r++)
for(int l=1;l<=4;l++)
for(int r=1;r<=4;r++)
}for(int i=0;i<=4;i++)
for(int j=0;j<=4;j++)
ans=min(ans,f[n][i][j]);
printf("%d
",ans);
}
第二次**,預處理move陣列,簡單方便
#include#include#include
using
namespace
std;
int n,f[10001][5][5],y,ans=50000
;int move[5][5]=,,,,};
intmain()
if(a)
continue
; }
for(int l=1;l<=4;l++)
for(int r=1;r<=4;r++)
for(int l=1;l<=4;l++)
for(int r=1;r<=4;r++)
}for(int i=0;i<=4;i++)
for(int j=0;j<=4;j++)
ans=min(ans,f[n][i][j]);
printf("%d
",ans);
}
3049 舞蹈家懷特先生
時間限制 1 s 空間限制 64000 kb 題目等級 gold 輸入描述 input description 第一行n,表示有n個時刻 1 n 10000 第二到n 1行,每行乙個數,表示需要踩得版 輸出描述 output description 乙個數,最小消耗體力 樣例輸入 sample in...
codevs 3049 舞蹈家懷特先生
題目描述 description 懷特先生是乙個大胖子。他很喜歡玩跳舞機 dance dance revolution,ddr 甚至希望有一天人家會腳踏 舞蹈家懷特先生 可惜現在他的動作根本不能稱作是在跳舞,儘管每次他都十分投入的表演。這也難怪,有他這樣的體型,玩跳舞機是相當費勁的。因此,他希望寫乙...
CODEVS 3049 舞蹈家懷特先生
根據題目描述,只有一開始會站在0這個格仔上,以後不會向這個格仔移動 假設f i j k 為 當前時間i,兩隻腳分別在j,k兩個格仔上的最小體力花費 第i個時間的狀態為f i a i k 或者f i j a i 即有乙隻腳在指定格仔上,所以分兩種情況列舉 轉移方程 f i j a i min f i ...