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

国际最好的摄影作品网站企业网站建设套餐价格

国际最好的摄影作品网站,企业网站建设套餐价格,企业宣传片视频模板,网站开发毕业周记完全背包与01背包的区别 01背包对于一个物品只能选择一次,但是完全背包可以选择任意次; 思路 和01背包类似,01背包我们只需要判断选或不选,完全背包也是如此,不同的是,对于这个物品我们在判断选后在增加一…

完全背包与01背包的区别

01背包对于一个物品只能选择一次,但是完全背包可以选择任意次; 

思路

和01背包类似,01背包我们只需要判断选或不选,完全背包也是如此,不同的是,对于这个物品我们在判断选后在增加一次选择的机会,直到不选,跳转至下一个物品即可;

一般代码:

 f[i][j]=max(f[i][j],f[i-1][j-k*v[i]]+k*w[i]);

第k次,不选的话就是它本身,选的话就是直接选择k次即可;

当然这个代码在数据稍微大一点的时候就会超出时间限制;

#include<iostream>
using namespace std;
const int N=1004;
int f[N][N];
int w[N],v[N];int main()
{int n,m;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=0;j<=m;j++){for(int k=0;k*v[i]<=j;k++){f[i][j]=max(f[i][j],f[i-1][j-k*v[i]]+k*w[i]);}}}cout<<f[n][m]<<endl;
}

优化思路

上面代码会超出时间限制是因为三层循环,下面我们来把第三层循环优化掉:

f[i][j]=max(f[i][j],f[i-1][j-v]+w,f[i-1][j-2*v]+2*w,f[i-1][j-3*v]+3*w......f[i-1][j-k*v]+k*w)

f[i][j-v]=max(             f[i][j-v],f[i-1][j-2*v]+w,f[i-1][j-3*v]+2*w......f[i-1][j-k*v]+k*w)

f[i-1][j-v]+w,f[i-1][j-2*v]+2*w,f[i-1][j-3*v]+3*w......f[i-1][j-k*v]+k*w 不就是f[i][j-v]+w

那么我们可以得到:f[i][j]=max(f[i][j],f[i-1][j-v]+w)

这样我们不就可以不用写第三层循环了吗?

直接用:

            f[i][j]=f[i-1][j];
            if(j>=v[i])
            f[i][j]=max(f[i][j],f[i][j-v[i]]+w[i]);

优化代码:

#include<iostream>
using namespace std;
const int N=1004;
int f[N][N];
int w[N],v[N];int main()
{int n,m;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=0;j<=m;j++){f[i][j]=f[i-1][j];if(j>=v[i])f[i][j]=max(f[i][j],f[i][j-v[i]]+w[i]);}}cout<<f[n][m]<<endl;
}

我们来看一下核心代码:

            f[i][j]=f[i-1][j];
            if(j>=v[i])
            f[i][j]=max(f[i][j],f[i][j-v[i]]+w[i]);

还记得01背包的代码吗?
             f[i][j] = f[i - 1][j];

             if(j>=v[i])
             f[i][j]= max( f[i - 1][j],f[i - 1][j - v[i]] + w[i] );

是不是只有(红色标记):

  f[i][j]= max( f[i - 1][j],f[i - 1][j - v[i]] + w[i] );不同

再次优化代码:

注意:

这里我的j的大小是从小到大开始的:

01背包中,f[i][j]= max( f[i - 1][j],f[i - 1][j - v[i]] + w[i] );对于f[j]就相当于f[i-1][j]的大小,如果从小到大遍历,那么f[i-1][j]的大小就会发现变化,那么优化后的代码就不满足我们所推导的公式,所以我们要从大到小;

类比于01背包,完全背包的公式, f[i][j]=max(f[i][j],f[i][j-v[i]]+w[i]);对于这个公式如果从大到小就会改变f[i][j]的大小,不满足所推导的公式;

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

以上就是全部内容!!

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

相关文章:

  • 如何做视频类网站crm平台是什么
  • 苗木公司网站模板梅州做网站多少钱
  • 酒店网站的设计摘要网站能查到从哪里做的吗
  • 做一手楼房的网站佛山网络公司推荐
  • asp.net 个人网站长春关键词排名优化
  • 浦口建设局网站网站源码 手机 微信
  • 优秀自适应网站建设哪家好河池seo快速排名
  • 网站编程论文优化防疫二十条措施
  • 九江商城网站建设空间注册网站
  • 集团酒店网站建设邢台市地图全图高清版
  • 汕头网站建设工作苏州网站制作出名 乐云践新
  • 搜索网站的方法顺企网下载安装手机版
  • 下载的网站模版怎么用做网站怎么连数据库
  • 淘宝联盟个人网站怎么做移动端网站生成器
  • 网站定制建网站定制建设设英文网站后台维护
  • php源码项目 门户网站开发网站信息化建设建议书
  • 企业网站四种类型包装设计效果图
  • ICP备案和实际网站不是一个名字新建站点的步骤
  • 网站建设市场需求大做网站php需要几个人
  • 简述网站开发的几个步骤制作一个静态网站的步骤
  • asp怎么做网站适配做网站那家比较好
  • 佛山响应式网站开发首页定制
  • 刚注册公司怎么做网站网站 数据报表如何做
  • wordpress查询数据库页面seo网站推广佛山
  • 企业网站建设的几种形式网站开发是什么职位
  • 国外做网站卖东西要什么条件北京小程序开发电话
  • 聚豪云免费虚拟主机重庆网络seo公司
  • 怎么发布php网站深圳网站建设选云聚达
  • 宜昌教育云网站建设公司图标设计大全免费 logo
  • 网站开发讲座心得体会网站开发资料