1. 程式人生 > >JustOj 2009: P1016 (dp)

JustOj 2009: P1016 (dp)

描述 1.0 type mem namespace 一行 bsp std efi

題目描述
  有一個箱子容量為v(正整數,o≤v≤20000),同時有n個物品(o≤n≤30),每個物品有一個體積 (正整數)。要求從 n 個物品中,任取若幹個裝入箱內,使箱子的剩余空間為最小。
輸入
第一行,一個整數,表示箱子容量; 第二行,一個整數,表示有n個物品; 接下來n行,分別表示這n個物品的各自體積。
輸出
一個整數,表示箱子剩余空間。
樣例輸入
24
6
8
3
12
7
9
7
樣例輸出
0

題解:背包問題
 1 #include <iostream>
 2 #include <algorithm>
 3
#include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <cmath> 9 #include <ctime> 10 #include <map> 11 #include <set> 12 #include <queue> 13 using namespace std; 14 #define
lowbit(x) (x&(-x)) 15 #define max(x,y) (x>y?x:y) 16 #define min(x,y) (x<y?x:y) 17 #define MAX 100000000000000000 18 #define MOD 1000000007 19 #define pi acos(-1.0) 20 #define ei exp(1) 21 #define PI 3.141592653589793238462 22 #define INF 0x3f3f3f3f3f 23 #define mem(a) (memset(a,0,sizeof(a))) 24 typedef long
long ll; 25 ll gcd(ll a,ll b){ 26 return b?gcd(b,a%b):a; 27 } 28 bool cmp(int x,int y) 29 { 30 return x>y; 31 } 32 const int N=10005; 33 const int mod=1e9+7; 34 int a[31]; 35 int main() 36 { 37 std::ios::sync_with_stdio(false); 38 int v,n,s,i; 39 cin>>v>>n; 40 int dp[v+1]; 41 memset(dp,0,sizeof(dp)); 42 for(i=0;i<n;i++){ 43 cin>>a[i]; 44 for(int j=v;j>=a[i];j--){ 45 dp[j]=max(dp[j],dp[j-a[i]]+a[i]); 46 } 47 } 48 cout<<v-dp[v]; 49 return 0; 50 }

JustOj 2009: P1016 (dp)