当前位置: 首页 > news >正文

免费申请域名的网站杭州市西湖区建设局网站

免费申请域名的网站,杭州市西湖区建设局网站,建筑公司网站领导致辞,长春网站建设免费咨询思路 dp 用f[i][j]来表示当体积为j时 考虑前i件物品可以获得的 最大值 记住f[i][j]本身是个价“价值” 考虑两种状态 是否将第i件物品放入背包里面 将背包的体积从小到大递增来进行考虑 首先 考虑条件 如果当前增加的体积放不下下一件物品 则该体积 可以获得的最大值可以直接…

思路 dp
用f[i][j]来表示当体积为j时 考虑前i件物品可以获得的 最大值 
记住f[i][j]本身是个价“价值” 
考虑两种状态 是否将第i件物品放入背包里面
将背包的体积从小到大递增来进行考虑
首先 考虑条件 如果当前增加的体积放不下下一件物品 
则该体积 可以获得的最大值可以直接继承上一个f[i-1][j] 
如果可以放下 则比较 放入与不放入谁获得的值较大
即 f[i-1][j]与f[i-1][j-v[i]]+w[i]比较
 //-v[i]是为了减去放入后的背包体积
 加w[i]是为了加上放入后获得的价值
 每一次存下的 都是基于考虑到当前物品 的最优选择
 比方说 前面已经进行了i件物品的选择 
 获得了一个基于i件物品的最大值
  这时候 第i+1件物品突然出现 体积为1,价值1000000;
  那么当背包体积只有1时的最大值会立刻被更新成100000;
  此时仍然是最优选择
  代码

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1010;
int f[N][N];
int w[N],v[N];
int n,m;
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>v[i]>>w[i];
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(j<v[i]){
            f[i][j]=f[i-1][j];
            }else{
                f[i][j]=max(f[i-1][j],f[i-1][j-v[i]]+w[i]);
            }
            
        }
    }
    cout<<f[n][m];
    return 0;
}

优化思路

二维到一维 

我们发现 考虑第i件物品时的最大值来自前面一层i-1件物品的最大值

也就是说 所有的当前层 都只来自上一层的最大值

而上上层已经不重要了

因此有没有可能直接删掉层数记录

观察发现f[i][]是从f[i-1][]这一层更新出来的

此时我们直接删除i

只使用j

观察式子f[j-v[i]]+w[i]

也就是说 如果我们逆序更新的话 需要使用和比较的数是j-v[i]

这个数是绝对小于j的 如果将j从m往0更新

保证了更新时只有大于等于j的数被覆盖掉了

而我们需要用的 j-v[i]则被保留下来

举例

如果我们逆序更新的话

假设 原来 f[j](1-5)是

1 2 5 7 9

然后我们逆序更新

for(int i=0;i<n;i++){
        for(int j=m;j>=v[i];j--){
            f[j]=max(f[j],f[j-v[i]]+w[i]);
        }
    }

假设 此时j=5,v[i]=2,    f[j-v[i]]+w[i]=11那么

我们和上一个f[3]比较 比较完了以后将上一个f[5]覆盖掉

此时f[j](1-5)的情况为

1 2 5 7 11

然后当j=4;

v[i]=1;

f[j-v[i]]+w[i]=9;

即我们需要用的是f[3]

此时f[3]并没有被污染 

执行以后

f[j](1-5)的情况为

1 2 5 9 11

以此类推我们的目的达到了

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int f[N];
int w[N],v[N];
int j[N]; 
int n,m;
int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++){
        //int x,y;
        cin>>v[i]>>w[i];
        //v[i]=x;
        //w[i]=y;
    }
    for(int i=0;i<n;i++){
        for(int j=m;j>=v[i];j--){
            f[j]=max(f[j],f[j-v[i]]+w[i]);
        }
    }
    cout<<f[m];
    return 0;

http://www.yayakq.cn/news/38520/

相关文章:

  • 电商网站设计图片素材网页制作与网站建设》在线作业 答案
  • 试客类网站开发苗木网站怎么做
  • 岷县城乡建设局网站惠州抖音seo
  • 投资 公司 网站模板制定网站建设方案
  • 音乐网站模板下载购物网站建设 属于信息系统管理与设计么?
  • 大学生建设网站手机网站自助建站
  • 记事本做网站怎么加背景图设计师网站大全
  • wordpress站中站南京网站制作联系宋
  • 做鞋设备网站新余+网站建设
  • 临沂网络网站建设权威发布高清图片
  • 濮阳市城乡建设管理局网站怎样做一个app
  • 网站无法备案恶意点击竞价时用的什么软件
  • photoshop官网入口seo搜论坛
  • 网站优化任务优化网站加载速度
  • 网站建设费如何记账展架立式落地式
  • 九江开发区建设规划局网站个人网站没人访问
  • php做调查问卷网站wordpress iis 中文乱码
  • 网站建设策划稿js 网站简体繁体
  • 苏州网站建设上往建站网页设计论文目录
  • 网站建设下载wordpress怎么安装模板文件
  • 个人网站域名怎么起自带浏览器建设银行网站打不开
  • 青岛建设网站设计公司浙江公司响应式网站建设推荐
  • 地产广告设计网站wordpress搜索图标
  • 域名做网站自己的电脑wordpress表格自适应
  • it网站设计房地产开发公司简介
  • 合肥网站建设工作wordpress 附件管理
  • 网站建设竞争大吗中国与菲律宾最新事件
  • 做外贸的人常用的网站博兴网站建设招聘
  • 公司里面有人员增减要去哪个网站做登记网站问题有哪些内容
  • 指定网站怎么设置路由器只访问免费ppt下载