上交OJ-1013. 无限背包

1013. 无限背包


Description

你现在有一个体积为V的大袋子,有N种物品,假设每种物品的数量有无限多个,而且第i种物品的体积是c[i],价值是w[i],请选择一些物品放入袋中,使袋中物品的价值总和最大。

注意每种物品的数量是无限多的;对于放入袋中的同种物品数量没有限制。

Input Format

第一行包含两个正整数V和N,分别代表袋子的体积和物品的种类数。

以下N行分别由2个正整数组成,代表每种物品的体积和价值。

V≤10000,N≤1000。

保证操作可在C++ int范围内完成。

Output Format

输出一个整数,表示最大的价值总和

Sample Input

5 3
2 3
3 2
4 1

Sample Output

6

分析

这是一个典型的动态规划问题,其关键也是记录中间结果。

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

int main()
{
    int V,N;
    int space[1001],value[1001];
    int tmp_V[10001];
    int i,j;
    
    memset(tmp_V, 0, sizeof(tmp_V));
    
    cin>>V>>N;
    for(i=1; i<=N; i++)
        cin>>space[i]>>value[i];
    
    for(i=1; i<=V; i++) {
        for(j=1; j<=N; j++) {
            if(i >= space[j])
                tmp_V[i]=max(tmp_V[i], tmp_V[i-space[j]]+value[j]);
        }
    }
    
    cout<<tmp_V[V]<<endl;
    
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树形动态规划,顾名思义就是树+DP,先分别回顾一下基本内容吧:动态规划:问题可以分解成若干相互联系的阶段,在每一个...
    Mr_chong阅读 1,522评论 0 2
  • 又是快要醒来的时候你来了,见了我还是对我哈哈笑,我,姥姥,还有你,在姥姥的卧室里面,我问你好点没,你站在那里说没事...
    Vero_7e7e阅读 309评论 0 0
  • 秋风萧瑟情未了, 亦有绿柳为君留。 艳霞红染天将暮, 谁言红尘情已绝!
    别在说别再说阅读 230评论 0 0
  • 卜算子.归人轻推门 文/絮飞儿 归人轻推门,欲给倾城喜。一泊明眸诉柔情,纵把秋千倚。 惊起亦痴嗔,羞掩胭脂泪。折柳...
    絮飞儿阅读 581评论 0 4
  • 最近抑郁魔怔频发,不想聊天,对好多事情都提不起兴趣,就连买来要吃的那只鲤鱼都已经在浴缸里养了好几天。没有给自己做一...
    陶小鱼阅读 277评论 4 1