魔法水 二分

2022-05-11 02:10:52 字數 1733 閱讀 3290

[description]

行c列的網格s

,每個小格仔要麼有乙個需要去打敗的匈牙利樹蜂龍,要麼是他的老師斯內普離開他時留下的一瓶魔法藥水。有龍的格仔(i, j)

需要花費|s[i][j]|

的力量點,而有魔法藥水的格仔(i, j)

可以恢復哈利波特|s[i][j]|

的力量。如果哈利波特的力量在任何時候掉到了0

或更少,那麼他就死了,無論什麼魔法石也救不了他。

哈利波特從左上角的格仔(1, 1)

出發,要到達右下角(r, c)

。對於每個格仔(i, j)

,哈利波特可以選擇向右到(i, j+1)

或者向下到(i+1, j)

,但是不能走出這整個格仔s

的邊框。在走之前哈利波特用莫法探測清楚了每個格仔裡有什麼,但是他不知道如何用最小力量花費來收集魔法石,所以請再一次幫助他。

[input]

第一行乙個數t

,表示t

組資料。

對於每組資料,第一行兩個整數r

和c。接下來r

行,每行c

個整數。從上到下是1~r

行,從左到右是1~c

列。若s[i][j]

< 0

則(i,

j)包含龍,否則包含魔法石。

[output]

對於每組資料輸出一行,想要能從(1,

1)走到(r,

c),哈利波特需要在(1,

1)擁有的最小力量值。

[sample

input]32

301 -3

1-2 022

0120

340-2 -3 1

-14 0 -2

1-2 -3 0

[sample

output]21

2一開始,我是想直接一遍廣搜過去,但是發現這樣無法滿足題目的要求,於是我們就可以二分開始的分數,然後二分檢驗。檢驗可以用dp,也可以用廣搜,我用的是廣搜。不過,好像聽黃dalao說,可以直接倒著搜一遍,不過我沒有試過。

**:

#include#include

#include

#include

#include

#define ll long long

#define il inline

#define db double

using

namespace

std;

il int

gi()

while(ch>='

0'&&ch<='9'

)

return x*y;

}il ll gl()

while(ch>='

0'&&ch<='9'

)

return x*y;

}int

n,m;

int map[545][545

];int mo[545][545

];int t[1000045][2

];bool vis[545][545

];int dist[3]= ;

il bool bfs(int

x) }}}

return0;

}}int

ans;

il void

hzr()

}int

main()

return0;

}

2783 魔法藥水 二分

小a終於來到了最後一題。小明翻找自己的揹包,發現了很多能夠提公升自己能力值的藥水。小a共發現了n種藥水,第i種藥水有ai瓶,使用後能使能力值加bi。但相同種類的藥水,是不能連續使用的。小a覺得自己至少將能力值提公升x x 1 才有把握ak這場新生賽。藥水的味道並不好,小明想盡量少的使用藥水。你能告訴...

二分 水題整理

感覺自己現在的水平太窪了,連二分這種題都要調好久。感覺二分總是寫不對啊,我真是太水了。在n個數之中插入k個數,使得相鄰的兩個數之間的差值的最大值最小。像這種最大值最小型別的題目,都是考慮使用二分策略 但是這道題我在第一次做的時候卻想錯了,我使用的貪心,我將相鄰的兩個數之間的差值進行排序,然後每次選出...

Uva10341 水二分 卡精度

二分的題,不過精度卡的要死,最後執行了100次迴圈才過。tt 以後二分如果卡精度,就果斷不用while判斷了,還有就是判斷方程無解的時候,考慮可能為0的情況。include include include include include include include define maxn 100...