N個のアイテムと容量Vのナップザックがあります。各アイテムは 1 回のみ使用できます。
i 番目のアイテムはボリューム vi と値 wi を持ちます。
どのアイテムをバックパックに入れるかを解決すると、それらのアイテムの合計がバックパックの容量を超えず、合計値が最大になります。
最大値を出力します。
入力フォーマット
最初の行では、2 つの整数 N と V がスペースで区切られており、それぞれアイテムの数とバックパックの体積を表しています。
次に N 行があり、各行にはスペースで区切られた 2 つの整数 vi、wi があり、それぞれ i 番目の項目の量と値を表します。
出力フォーマット
最大値を表す整数を出力します。
データ範囲
0<N,V≤1000
0<vi,wi≤1000
入力サンプル
4 5
1 2
2 4
3 4
4 5
出力例:
8
#include<bits/stdc++.h>
名前空間 std を使用します。
const int N=1010;
int f[N];
int V[N],W[N];
int main()
{ int n,m; シン>>n>>m; for(int i=1;i<=n;i++) cin>>V[i]>>W[i]; for(int i=1;i<=n;i++) for(int j=m;j>=V[i];j--) f[j]=max(f[j],f[jV[i ]]+W[i]); cout<<f[m]<<endl; 0を返します。}