当前位置:首页 > 默认分类 > 正文内容

【动态规划】基础背包问题

virtualman8年前 (2017-10-02)默认分类1098

 

1159. 背包问题一 (Standard IO)

时间限制: 1000 ms  空间限制: 262144 KB  具体限制  

题目描述

有个背包可承受重量N,现有T件物品
每件物品重量为Wi,价值为Vi ,每件物品只有一个,这个背包可以装载物品的最大价值是多少?

输入

一行,N T 之间用空格隔开。
后面t行,每行:重量Wi,价值Vi。

输出

这个背包可以装载物品的最大价值。

样例输入

100 5

77 92

22 22

29 87

50 46

99 90

样例输出

133

数据范围限制

N<=1000,T<=100,1<=Wi,Vi<=100

/*
问题:
有个背包可承受重量N,现有T件物品.
每件物品重量为Wi,价值为Vi.
每件物品只有一个.
这个背包可以装载物品的最大价值是多少?
*/
#include <iostream>
#include <cstdio>
using namespace std;
//定义三个数组, W为不同物体的 重量,V为不同物体的价值,F为不同称量背包的总价值; 
int W[2005],V[2005],F[2005];
int main()
{
    /*-------定义变量并读入数据------------*/
    int N,T;
    scanf("%d %d",&N,&T);
    for(int i=1;i<=T;i++)
        scanf("%d %d",&W[i],&V[i]);
    /*--------------动态规划----------------*/
    for(int i=1;i<=T;i++)//遍历每一件物品 
        for(int j=N;j>=W[i];j--)//不断地尝试 放置每一件物品 
        {
            F[j]=max(F[j-W[i]]+V[i],F[j]);//状态转移方程: F[j]=max(F[j-W[i]]+V[i],F[j])   刷新最大背包的当前最大价值; 
            /*详细分析此处:
            这里使用了动态规划算法,其实也就是记忆化搜索,
            就是把F【】中没搜一次都记录在F这个数组中,
            以后再次递归或递推时,就不需要 再次的计算,
            直接从数组中查询是否存在,如果存在,直接调用即可; 
            */
        }
    /*----------------输出解答-------------*/
    cout<<F[N]<<endl;
    return 0;    
} //PS:2017年10月2日19:02:02

相关文章

【疑难杂症】记录一次定位并修复涉及支付、转账的系统性BUG

【疑难杂症】记录一次定位并修复涉及支付、转账的系统性BUG

在某个线上的项目上,突然收到用户反馈,存在转账连续转两次的情况。一开始接到反款后并没有太在意,因为这个项目已经在线上稳定运行了近两年的时间,期间也并没有对订单或者支付系统进行修改。支付的接口也没有发生变化,因此,第一次反馈认为是一次用户的误报。但是,今天下午,有个开发者用户给我再一次反馈了这个BUG...

大佬推荐用的两个git指令:git rebase 和 git commit --amend

git rebase git rebase 命令用于将本地的提交重新应用到另一个基础分支上。它可以帮助你保持线性的项目历史记录,避免大量的合并提交(merge commits)。当你从一个分支拉取最新的更改并希望将你的工作基于这些更改之上时,可以使用 git rebase。 使用场景: 当...

常见License代码开源要求

  常见许可证类型 典型软件 触发代码开源义务前提要求 开源要求和范围 BSD类 如:Apache/BSD/MIT等 Tomcat;OpenSSL 无 无 MPL类 如:MPL/EPL等 FirFox,Eclips...

【随笔】关于开发一个既能日常记账,又能拥有资产管理功能的APP的Idea

随便写了,想到哪里写哪里。最近一直在市面找一款记账APP,但是感觉都不满足我的需求。我的想法是,在普通账本程序的基础上,再加上多人管理。资产管理。资产管理一定要把价格接口对接好。我举个例子,比如有虚拟货币资产ETH 1个,那么就应该在统计的时候,按实时市值进行统计。又或者按照当天的市值统计。关于资产...

\r \n \r\n三者作为换行符的区别?

在计算机领域,\r、\n、\r\n 是表示文本行结束的转义字符,主要区别如下: ˂a name="1. \r(回车符,Carriage Return)" class="reference-link" href="#"˃1. \r(回车符,Carriage Return) ASCII码:13(十进...

GIT文件名大小写修改后,提交不上去?

可执行以下命令更改 git 设置,使其区分文件名的大小写。但如果你已经提交了有问题的,会造成仓库上有大写、小写两份,一定要先回退提交后,重新提交。 git config core.ignorecase false...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。