1660は、質問:問題をパッキング[ブルーブリッジカップ] [アルゴリズムのトレーニングVIP]
制限時間:1秒メモリ制限:128メガバイト提出:150は解決:75
タイトル説明
ボックスは、容量V(正の整数、0 <= V <= 20000を有する )、 N項目(0 <N <= 30)があるが 、 各項目は、ボリューム(正の整数)を有しています。
n個のアイテムの残りの空間要件ボックスが最小化されるように、ボックスに番号のいずれかを取ります。
エントリー
最初の整数を行い、箱の容量を示し、
第二行整数、それはN項目があることを示し、
次のn行、各行は、n個のアイテムのそれぞれの整数の体積を表します。
輸出
箱の残りの空間を表す整数。
サンプル入力
24 6 8 3 12 7 9 7
サンプル出力
0
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[20009];
int main(void){
int v,n;
int a[109];
scanf("%d%d",&v,&n);
for( int i=1;i<=n;i++)
scanf("%d",&a[i]);
for( int i=1;i<=n;i++){
for( int j =v ;j>= a[i];j-- ){
dp[j] = max( dp[j] , dp[j-a[i]] +a[i]);
}
}
cout<<v - dp[v]<<endl;
return 0;
}