自2023年以來,當美國的曼哈頓專案小組引爆了第一顆核彈時,全球的核**數量急劇增加。
如今,fzu的乙個名叫aekdycoin的瘋狂男孩擁有核**,想要毀滅我們的世界。幸運的是,我們神秘的間諜網路已經得到了他的計畫。現在,我們需要阻止它。
但這項艱鉅的任務顯然並不容易。首先,我們知道,核**的作業系統由一些連線的電站組成,它們構成了乙個龐大而複雜的電網。每個電站都有它的功率值。要啟動核**,它必須消耗電網一半的電力。所以首先,我們需要將一半以上的能量分散。我們的坦克已經為我們在基地的行動做好了準備(id是0),我們必須在路上駕駛它們。至於發電站,只有當我們的坦克停在那裡時,我們才能控制它們。1單位距離花費1單位油。我們有足夠的坦克使用。
現在我們的指揮官想知道這次行動的最小石油成本。
input
輸入資料的第一行包含乙個整數t,表示檔案中測試點的數量。
對於每組資料,第一行有兩個整數n(1<= n<= 100), m(1<= m<= 10000),指定站點的數量(id為1、2、3…n),以及站點之間的道路數量(雙向)。
接下來的m行,每一行都有三個整數 st(0<= st<= n), ed(0<= ed<= n), dis(0<= dis<= 100),指定起始點、結束點和它們之間的距離。
接下來的n行,每一行都有乙個整數pow(1<= pow<= 100),按id順序表示各電站的功率。
output
輸出最低的石油成本。
若不存在則輸出 「impossible」(不帶引號).
sample input
22 3
0 2 9
2 1 3
1 0 213
2 12 1 313
sample output
5impossible
注意:是要選擇1~n的點放坦克,而不是路過而已;
然後這裡求最短路用的是floyd,求出0到1~n各個點的最短路,然後01揹包選點;
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
using
namespace std;
typedef
long
long ll;
const
int maxn =
200;
int mz[maxn]
[maxn]
,path[maxn]
[maxn]
,val[maxn]
;int n,m;
void
floyd()
}//忽略get_path函式以及path陣列
void
get_path
(int u,
int v,vectorint,
int>>
&p))
;else
}int
main()
else
}int sum=0;
for(
int i=
1;i<=n;i++
) sum/=2
;floyd()
;int temp=0;
for(
int i=
1;i<=n;i++)if
(mz[0]
[i]!=inf)
temp+
=mz[0]
[i];
int dp[
10005];
memset
(dp,0,
sizeof
(dp));
for(
int i=
1;i<=n;i++
)for
(int j=temp;j>=mz[0]
[i];j--
)bool flag=0;
for(
int i=
0;i<=temp;i++)if
(dp[i]
>sum)if(
!flag)
printf
("impossible\n");
}return0;
}
HDOJ3339 最短路 01揹包
題意 給出電站之間的路徑長度和每個電站的電量,需要派出坦克去攻占電站,以控制多一半的電量 要比一半多,因為這個wa了一次 問最少走多少路徑,坦克數量足夠多,乙個坦克只能控制乙個電站。思路 用floyd求出起點 0點 到所有電站的距離,當做揹包物品的價值,然後以每個電站的發電量作為揹包物品的容量,進行...
Present 神奇 揹包 最短路
先設 p1p 1 表示最小的 pp 當 pxp x 使用了 p1p 1 次時,可以用 pxp x 次 p1p 1 替代,舉個例子,假如當前選物品的情況是 i 2n p 1 1 pii 2 n p1 1 p i 此時只要在 x 2,n x 2 n 中再選出任意乙個物品 pxp x 則 p1p 1 個p...
三國志(最短路SPFA 01揹包)
三國志 時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述 三國志 是一款很經典的經營策略類遊戲。我們的小白同學是這款遊戲的忠實玩家。現在他把遊戲簡化一下,地圖上只有他一方勢力,現在他只有乙個城池,而他周邊有一些無人佔的空城,但是這些空城中有很多不同數量的同種財寶。我們的小白同學...