您的位置:首页 > 其它

计蒜客 [蒜头君的购物袋1] 01背包问题

2018-01-14 12:31 218 查看
蒜头君去超市购物,他有一只容量为 VVV的购物袋,同时他买了 nnn件物品,已知每件物品的体积 viv_ivi​。蒜头君想知道,挑选哪些物品放入购物袋中,可以使袋子剩余的空间最小。

输入格式

第一行输入一个整数 VVV(1≤V≤20,0001V \leq 20,0001≤V≤20,000),表示购物袋的容量。第二行输入一个整数 nnn(1≤n≤301\leq n \leq 301≤n≤30),表示蒜头君购买的nnn件物品。接下来输入 nnn行,每行输入一个整数 viv_ivi​(1≤vi≤10,0001\leq v_i \leq 10,0001≤vi​≤10,000),表示第iii件物品的体积。

输出格式

输出一行,输出一个整数,表示购物袋最小的剩余空间。

样例输入

20
5
7
5
7
3
7

样例输出

1
典型的01背包问题
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char *argv[]){int max2=0;int v,n,i,j;scanf("%d%d",&v,&n);int dp[v+10],w[n+10];memset(dp,0,sizeof(dp));for(i=1;i<=n;i++){scanf("%d",&w[i]);}for(i=1;i<=n;i++){for(j=v;j>=w[i];j--){dp[j] = max(dp[j-w[i]]+w[i],dp[j]);if(max2<=dp[j]){max2= dp[j];}}}printf("%d",v-max2);return 0;}int max (int a,int b){if(a>=b){return a;}else{return b;}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: