当前位置: 首页 > 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/478507/

相关文章:

  • 零食公司建立网站的原因建站服务器
  • 云浮市做网站的公司什么情况下需要建设网站
  • 上海建设网站方法百度智能云建站
  • 营销网站策划网站美工做的是什么
  • 微网站建设报价成都 地铁 建设 网站
  • 网站运营经验建设手机网站包括哪些费用吗
  • 龙岗网站-建设深圳信科易居房产cms
  • 做pc端网站案例做外贸哪里网站比较好
  • 海沧建设网站多少钱射阳做网站的公司
  • 宁波网站优化如何住房和城乡建设部政务服务门户
  • ppt效果网站南充市住房和城乡建设局网站
  • 网站主题的分类品牌营销案例分析
  • 网站建设公司演讲稿企业网站建设需要哪些东西
  • 佛山顺德网站建设公司网站建设的基础是什么意思
  • 电子商务网站建设工资wordpress 去掉评论框
  • 做家常菜的网站手机主页哪个网站好
  • 合肥网站建设需东莞网站设计讯息
  • 如何选择网站建设公司wordpress 缩略图 api
  • 狼人最新网站杭州做产地证去哪个网站
  • 网站建设流程总结网站制作的趋势
  • 公司网站建设推合同营销网站定制公司
  • 森动网网站建设好吗西安做网站多钱
  • 如何做图让网站的图更清晰深圳网站建设(龙华信科)
  • 网站空间与服务器的区别wordpress文章excerpt字数
  • 怎样制定一个网站建设方案wordpress地址支持中文
  • 有哪个网站教人做美食网页建设教程
  • 宁夏电建网站百度提问在线回答问题
  • 做美容网站东莞百度seo新网站快速排名
  • 关于加强网站建设的建议微信小程序开发技术介绍
  • 网络维护网站建设培训wordpress按钮弹窗