博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2602 Bone Collector 0-1背包;
阅读量:4113 次
发布时间:2019-05-25

本文共 1011 字,大约阅读时间需要 3 分钟。

题意:n件物品,每件物品都有价值value和体积volume,求一个容积v的背包最多能装的价值;
#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define MM(a) memset(a,0,sizeof(a))typedef long long ll;typedef unsigned long long ULL;const int mod = 1000000007;const double eps = 1e-10;const int inf = 0x3f3f3f3f;const int big=50000;int value[1005],volume[1005],dp[1005][1005];int main(){ int cas; cin>>cas; while(cas--) { int n,vl; scanf("%d %d",&n,&vl); for(int i=1;i<=n;i++) scanf("%d",&value[i]); for(int i=1;i<=n;i++) scanf("%d",&volume[i]); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) for(int j=0;j<=vl;j++) if(j>=volume[i]) dp[i][j]=max(dp[i-1][j],dp[i-1][j-volume[i]]+value[i]); else dp[i][j]=dp[i-1][j]; printf("%d\n",dp[n][vl]); } return 0;}
分析:0-1背包dp[i][j]扫到第i件物品时,总花费不超过j的情况下所能得到的最大价值,那么第i件物品可取可不取
取得话dp[i][j]=dp[i-1][j-volume[i]]+value[i],不取的话dp[i][j]=dp[i-1][j]

转载地址:http://hvgsi.baihongyu.com/

你可能感兴趣的文章
Reverse Integer--反转整数
查看>>
Container With Most Water --装最多水的容器(重)
查看>>
Longest Common Prefix -最长公共前缀
查看>>
Letter Combinations of a Phone Number
查看>>
Single Number II --出现一次的数(重)
查看>>
Valid Parentheses --括号匹配
查看>>
Remove Element--原地移除重复元素
查看>>
Remove Duplicates from Sorted Array--从有序数组中移除重复元素
查看>>
Count and Say
查看>>
Gas Station
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
Valid Palindrome 简单的回文判断
查看>>
Pascal's Triangle -- 生成杨辉三角
查看>>
Pascal's Triangle II 生成杨辉三角中的某行
查看>>
Minimum Depth of Binary Tree -- 二叉树的最小深度 DFS 加剪枝
查看>>
Climbing Stairs 爬楼梯方法 动态规划
查看>>
Merge Two Sorted Lists 合并两个有序链表
查看>>
pow(x,n) 为什么错这么多次
查看>>
Jump Game 动态规划
查看>>
Binary Tree Maximum Path Sum 自底向上求解(重重重重)
查看>>