バックパックの問題 01

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を返します。}








おすすめ

転載: blog.csdn.net/2302_77099705/article/details/130985849