開二維肯定會爆記憶體了,箱子只有21個,我們考慮用狀壓dp來做。並且開兩個一維的。乙個代表為i狀態至少需要用多少個箱子,乙個表示用到第m個箱子的時候我們當前箱子剩餘的最大容量。
分兩種情況轉移:
1,我們當前的這個箱子剩餘容量夠裝,並且我們上一次裝了這個物品所用的箱子的狀態大於目前能裝且不用多餘箱子的狀態。
2,否則我們容量不夠了,並且我們裝下這個物品的狀態比我們多拿乙個箱子用的箱子還要多。
開始我用容器的 int加上#define int long long莫名奇妙沒過,改陣列過的。?。
#include
#define int long long
using
namespace std;
const
int m=
21,n=
1
,g[n]
,w[m]
;const
int inf=
0x3f3f3f3f3f3f3f3f
;signed
main()
for(
int i=
0;i<(1
<;i++
) f[i]
=inf,g[i]=0
; f[0]
=1; g[0]
=w;for
(int i=
0;i<(1
<;i++
)else
if(f[i|(1
<]>=f[i]+1
)}}if
(f[(
1<]>x) cout<<
"no"
"yes"
<}}
牛客練習賽17 E 求長度(spfa 狀壓dp)
給定一幅n個點m條邊的圖和s個一定要經過的點,問從0號點出發,經過這s個點再回到0號點的最短路徑長度是多少。第一行乙個整數t t 2 表示資料組數。對於每組資料,第一行兩個整數n,m表示點數和邊數 1 n,m 100,000 接下來m行,每行三個整數x,y,z 0 x,y n,0 z 1000 表示...
(概率dp)牛客練習賽39 C
現在一共有n天,第i天如果有流星雨的話,會有wi顆流星雨。第i天有流星雨的概率是pi。如果第一天有流星雨了,那麼第二天有流星雨的可能性是p2 p,否則是p2。相應的,如果第i 1 i 2 天有流星雨,第i天有流星雨的可能是pi p,否則是pi。求n天後,流星雨顆數的期望。因為當天的概率只與前一天的概...
牛客練習賽39 C 概率dp
現在一共有n天,第i天如果有流星雨的話,會有wi 第i天有流星雨的概率是pi 如果第一天有流星雨了,那麼第二天有流星雨的可能性是p2 p 第i 1 i 2 天有流星雨,第i天有流星雨的可能性是pi p,否則是pi。求n天後,流星雨顆數的期望。設ti 為第i天下雨的真正概率,由於第i天的概率只與第i ...