C語言實現 藍橋杯 演算法訓練 步與血

2021-10-07 17:52:01 字數 1384 閱讀 6000

藍橋杯試題解答彙總鏈結

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

有n×n的方格,其中有m個障礙,第i個障礙會消耗你p[i]點血。初始你有c點血,你需要從(1,1)到(n,n),並保證血量大於0,求最小步數。

輸入格式

第一行3個整數n,m,c,表示棋盤大小、障礙數量和你的血量

接下來m行,每行描述乙個障礙。包含三個整數x y p,分別表示障礙在第x行第y列,消耗血量為p。

輸出格式

如果可以到輸出步數,如果不可以,輸出"no"。

樣例輸入

10 10 10

2 8 35

1 10 25

9 9 63

5 6 46

2 6 43

8 7 92

5 3 54

3 3 22

7 9 96

9 10 13

樣例輸出
18
資料規模與約定
輸入資料中每乙個數的範圍。

0試題解析

步數最小就得每次只能向下或向右走,那麼這樣就很容易取動態規劃了設dp.co[i][j]為走到(i,j)位置需要的步數那麼dp.co[i][j]=min(dp.co[i-1][j],dp.co[i][j-1])但其中有障礙所以還需要儲存到每個位置的血量》0,否則說明這個點不能走

**#include

typedef

struct sstep;

intmain()

;// 棋盤chess的值為此處消耗的血量

for(i =

0;i < m;

++i)

step dp;

dp.blood[1]

[1]= c;

// 初始化血量

dp.co[1]

[1]=

0;// 初始化步數

for(i =

2;i <= n;

++i)

dp.co[i][1

]= dp.co[i-1]

[1]+

1;dp.blood[i][1

]= dp.blood[i-1]

[1]-chess[i][1

];if(dp.blood[i][1

]<=0)

}for

(i =

2;i <= n;

++i)

}else}}

else

if(dp.co[i-1]

[j]==0)

}else}}

}if(dp.blood[n]

[n]>0)

else

return0;

}

藍橋杯 演算法訓練 移動小球 C語言實現

移動小球 你有一些小球,從左到右依次編號為1,2,3,n.你可以執行兩種指令 1或者2 其中,1 x y表示把小球x移動到小球y的左邊,2 x y表示把小球x移動到小球y右邊。指令保證合法,即x不等於y。例如,初始狀態1,2,3,4,5,6的小球執行1 1 4後,小球1被移動到小球4的左邊,即2,3...

藍橋杯 演算法訓練VIP 新生舞會(C語言實現)

題目描述 新生舞會開始了。n名新生每人有三個屬性 姓名 學號 性別。其中,姓名用長度不超過20的僅由大小寫字母構成的字串表示,學號用長度不超過10的 僅由數字構成的字串表示,性別用乙個大寫字元 f 或 m 表示。任意兩人的姓名 學號均互不相同。換言之,每個人可被其姓名或學號唯一確定。給出m對 兩人的...

C語言實現 藍橋杯 演算法訓練 猴子吃包子

藍橋杯試題解答彙總鏈結 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 從前,有乙隻吃包子很厲害的猴子,它可以吃無數個包子,但是,它吃不同的包子速度也不同 肉包每秒鐘吃x個 韭菜包每秒鐘吃y個 沒有餡的包子每秒鐘吃z個 現在有x1個肉包,y1個韭菜包,z1個沒有餡的包子 問 猴子...