soj 2222 01揹包變形

2021-06-29 15:20:09 字數 938 閱讀 8687

背景:wa~tl~看來揹包還是很欠缺啊~

思路1(1500ms):變形的01揹包。把題目改為:選擇一組hp和大於等於所需血量且這組物品的分數之和最小,即可。這裡把hp看做cost,score看做weight。但是這個題有個特點是最後選擇hp必須大於等於k,容易想到,最多我們會有k+10000(10000為單個物品的最大hp值)的hp值,所以我們有這樣的轉移方程:

for i 0....n

for j k+10000....cost[i]

f[j]=min(f[j],f[j-cost[i]]+weight[i]])

這實際上是通過最多多選不超過10000的hp來達到目的。

思路2(208ms):對01揹包倒著走而多10000的計算而做出的優化。直接貼出方程,內容不難理解:

for i 0....n

for j 0....k

f[j+cost[i]]=min(f[j+cost[i]],f[j]+weight[i]])

思路1的**:

#include #include #include #include #include #include #include #include #include using namespace std;

const int m=1009,inf=0x3fffffff;

int dp[1000000],c[10009][2];

int main(void)

dp[0]=0;

for(int i=0;i < k;i++)

}int mins=inf;

for(int i=hp;i <= hp+10000;i++)

if(mins == inf ) printf("0\n");

else printf("%d\n",sum-mins);

}return 0;

}

soj3360 完全揹包

soj 3360 buying hay 簡介題意 農夫買乾草,需要買h,認識n個賣乾草的商人,每人的基礎購買包數是p i,為c i,不拆開賣,但是可以買很多份。問最少多少錢可以至少滿足h乾草的需求。這就是個完全揹包,不過和以前完全揹包不同的是,可以每乙份多加幾次。平時一般都從j sum到0,dp j...

揹包變形 思路

居民集會 藍橋村的居民都生活在一條公路的邊上,公路的長度為l,每戶家庭的位置都用這戶家庭到公路的起點的距離來計算,第i戶家庭距起點的距離為di。每年,藍橋村都要舉行一次集會。今年,由於村里的人口太多,村委會決定要在4個地方舉行集會,其中3個位於公路中間,1個位最公路的終點。已知每戶家庭都會向著遠離公...

01揹包變形

傳送門 現有n個物品,序號分別為1,2,n。對於每個i 1 i n 物品i有乙個體積wi和乙個價值vi。小明想在這n個物品中選取一些放到揹包裡帶回家。已知揹包的容積為w,這意味著所帶物品的總體積不能超過w。求出小明可以帶回家的物品總價值可能的最大值。constraints input 標準輸入格式如...