傳送門
現有n個物品,序號分別為1, 2, ... , n。對於每個i(1 ≤ i ≤ n),物品i有一個體積wi和一個價值vi。
小明想在這n個物品中選取一些放到揹包裡帶回家。已知揹包的容積為w,這意味著所帶物品的總體積不能超過w。
求出小明可以帶回家的物品總價值可能的最大值。
constraints
input
標準輸入格式如下:
nww1v1w2v2:wnvnoutput
輸出小明可以帶回家的物品總價值可能的最大值。
sample input 1
3 8sample output 13 30
4 50
5 60
90把物品1和物品3帶回家,此時它們的總體積為3 + 5 = 8,總價值為30 + 60 = 90最大。
sample input 2
1 1000000000sample output 21000000000 10
10sample input 3
6 15sample output 36 55 6
6 46 6
3 57 2
17物品2, 4和5可以被帶回家,此時它們的總體積為5 + 6 + 3 = 14,總價值為6 + 6 + 5 = 17
如果按照普通的01揹包的板子的複雜的是o(n*w),但是這個題的1 ≤ w ≤ 109,所以肯定會超時
那怎麼辦呢,注意這個題的每一個體積1 ≤ vi ≤ 103,就是說總體積不會超過1e5,
然後你設定一個dp[i],為價值為i的最小體積,然後從sumv到1判斷dp[i]是否小於w
#include#include#include
using
namespace
std;
typedef
long
long
ll;const
int maxn=1e6+100
;ll n,w[maxn],v[maxn];
ll dp[maxn];
ll sum=0
;ll w;
intmain()
memset(dp,
0x3f3f3f3f,sizeof
(dp));
dp[0]=0
;
for(int i=1;i<=n;i++)
} for(int i=sum;i>=1;i--)
}}
homework 01
選了電子版 大全2英文版 完整清晰版 chm 窮逼沒錢買書好煩躁t t 最樸素最暴力的方法是列舉所有的sum i j ,算出其值然後取最大。...
vue 01
1 有 紅 黃 藍 三個按鈕,以及一個200x200矩形框box,點選不同的按鈕,box的顏色會被切換為指定的顏色 黃色藍色 2 有一個20...
homework 01
我的github賬戶名是firedamp。 其實我最一開始看到最大子序列的和這個題目,最先想到的就是最簡單的o n 3 的演算法,在課堂上教的也確實是這個程式,但是這種演算法的時間複雜度必然是最高的,在資料比較大的時候需要付出很大的代價,於是我開始尋求新的方法,在參考了ta的部落格之後,我對那種o n 的...