背包,动态规划中一个很常见的类型。
有N 种物品和一个容量为V 的背包。放入第i 种物品耗费的费用是Ci,得到的价值是Wi。求解将哪些物品装入背包可使价值总和最大。
根据对于每种物品的数量要求,又可以将背包问题分为01背包(每种物品只有一个),完全背包(每种物品无限个),多重背包(每种物品特定数量个),分组背包(将物品分组,每组最多只有一个)等
接下来的两题,第一题是个简单01背包热身,第二题是个完全背包+多重背包的组合题
A.Bone Collector
思路:这是一道最基本的01背包问题,已知骨头价值和体积,装入特定体积背包,求最大价值。没有任何坑点,直接上手,算个热身。
/*
Author:Owen_Q
*/
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3+10;
int w[maxn],p[maxn],f[maxn];
int main()
{
int t,n,v;
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
scanf("%d%d",&n,&v);