首页 > 代码库 > JustOj 2009: P1016 (dp)
JustOj 2009: P1016 (dp)
题目描述
有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入
第一行,一个整数,表示箱子容量; 第二行,一个整数,表示有n个物品; 接下来n行,分别表示这n个物品的各自体积。
输出
一个整数,表示箱子剩余空间。
样例输入
2468312797
样例输出
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 10000000000000000018 #define MOD 100000000719 #define pi acos(-1.0)20 #define ei exp(1)21 #define PI 3.14159265358979323846222 #define INF 0x3f3f3f3f3f23 #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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。