[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...