码迷,mamicode.com
首页 > 其他好文 > 详细

经典的背包问题

时间:2016-04-25 22:19:15      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

 

背包问题I
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述

    有一个背包容积为 V 和 n 个物品,并给出每个物品有一个体积。要求从 n 个物品中,任取若干个装入背包内,使背包的剩余空间为最小。

输入
第一行两个正整数 V 和 n,分别表示背包的容积和待装物品的个数;第二行包括 n 个正整数,表示 n 个物品的体积,两两之间有一个空格分隔。
输出
一个数,表示背包中剩余空间的最小值
输入示例
24 6
8 3 12 7 9 7
输出示例
0
其他说明
数据范围:0<V≤20000,0<n≤30
 

真是太简单了,转移方程:dp[j]=max(dp[j],dp[j-a[i]]+a[i]);。

技术分享
 1 #include<iostream>  
 2 #include<cstring>  
 3 using namespace std;  
 4 int main()  
 5 {  
 6   int v,n;
 7   cin>>v>>n;  
 8   int a[n],dp[v+1];  
 9   memset(dp,0,sizeof(dp));  
10   for(int i=0;i<n;i++) 
11   {  
12     cin>>a[i];
13     for(int j=v;j>=a[i];j--)  
14       dp[j]=max(dp[j],dp[j-a[i]]+a[i]);  
15   }  
16   cout<<v-dp[v];  
17 }
View Code

 

经典的背包问题

标签:

原文地址:http://www.cnblogs.com/wxjor/p/5432704.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!