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

政府网站和政务新媒体建设管理办法成都百度推广排名优化

政府网站和政务新媒体建设管理办法,成都百度推广排名优化,网站备案的网站名称,wordpress 会员动态规划 文章目录动态规划一、背包问题一、01背包二、完全背包问题三、多重背包问题四、分组背包问题一、背包问题 一、01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包&#xf…

动态规划

一、背包问题

一、01背包

有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。

第 i 件物品的体积是 vi,价值是 wi。

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。
(1)F[i,j]:只在前i个物品里选,且总体积不超过j的最大价值(2)不选第i个:F[i−1][j](3)选第i个:F[i−1][j−v[i]]+w[i](4)F[i][j]=max(F[i−1][j],F[i−1][j−v[i]]+w[i])\begin{align} &(1)F[i,j]:只在前i个物品里选,且总体积不超过j的最大价值\\ &(2)不选第i个:F[i-1][j]\\ &(3)选第i个 :F[i-1][j-v[i]]+w[i]\\ &(4)F[i][j]=max(F[i-1][j],F[i-1][j-v[i]]+w[i]) \end{align} (1)F[i,j]:只在前i个物品里选,且总体积不超过j的最大价值(2)不选第i个:F[i1][j](3)选第i个:F[i1][jv[i]]+w[i](4)F[i][j]=max(F[i1][j],F[i1][jv[i]]+w[i])
优化前:

    memset(f,0,sizeof f);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-1][j-v[i]]+w[i]); //选}cout<<f[n][m]<<endl;

优化后:(每次只会用到上一层的状态)

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1010;
int n,m;
int f[N];
int v[N],w[N];
int main()
{cin>>n>>m;for(int i=1;i<=n;i++)cin>>v[i]>>w[i];memset(f,0,sizeof f);for(int i=1;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]<<endl;return 0;}
二、完全背包问题

有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。

第 i种物品的体积是 vi,价值是 wi。

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。
(1)F[i,j]:只在前i个物品里选,且总体积不超过j的最大价值(2)选k(k>=0)个物品i:F[i−1][j−k∗v[i]]+K∗w[i]\begin{align} &(1)F[i,j]:只在前i个物品里选,且总体积不超过j的最大价值\\ &(2)选k(k>=0)个物品i:F[i-1][j-k*v[i]]+K*w[i]\\ \end{align} (1)F[i,j]:只在前i个物品里选,且总体积不超过j的最大价值(2)k(k>=0)个物品iF[i1][jkv[i]]+Kw[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]);}

优化:

f[i , j ] = max( f[i-1,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 , j-v]= max(            f[i-1,j-v]   ,  f[i-1,j-2*v] + w , f[i-1,j-3*v]+2*w , .....)
由上两式,可得出如下递推关系: f[i][j]=max(f[i,j-v]+w , f[i-1][j]) 
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]>=0)f[i][j] = max(f[i][j],f[i-1][j-v[i]]+w[i]);
}

优化变一维:

 for(int i = 1 ; i<=n ;i++)for(int j = v[i] ; j<=m ;j++)//注意了,这里的j是从小到大枚举,和01背包不一样{f[j] = max(f[j],f[j-v[i]]+w[i]);}
三、多重背包问题

有 N 种物品和一个容量是 V 的背包。

第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。

求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。
输出最大价值。

思路1:参考完全背包

int n,m;
int v[N],w[N],s[N];
int f[N][N];int main()
{cin>>n>>m;for(int i=1;i<=n;i++) cin>>v[i]>>w[i]>>s[i];for(int i=1;i<=n;i++)for(int j=0;j<=m;j++)for(int k=0;k<=s[i]&&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;return 0;
}

思路2**:二进制优化将n种物品,每种Si个的多重背包,拆分打包看成N件物品(组)的01背包问题**
(1)例如当s[i]=7时(2)将其拆分为:1,2,4的三组,就可以凑出0−7中的任意数(3)s[i]=9时:1,2,4,2就可以凑出0−7中的任意数\begin{align} &(1)例如当s[i]=7时\\ &(2)将其拆分为:1,2,4的三组,就可以凑出0-7中的任意数\\ &(3)s[i]=9时:1,2,4,2就可以凑出0-7中的任意数 \end{align} (1)例如当s[i]=7(2)将其拆分为:1,2,4的三组,就可以凑出07中的任意数(3)s[i]=9时:1,2,4,2就可以凑出07中的任意数

#include<iostream>using namespace std;const int M=12000;int n,m;
int f[M],v[M],w[M];
int main()
{cin>>n>>m;int cnt=0;while(n--){int a,b,c;cin>>a>>b>>c;int t=1;while(c>=t){v[++cnt]=a*t;w[  cnt]=b*t;c-=t;t=t*2;}if(c) {v[++cnt]=a*c; w[cnt]=b*c;}}n=cnt;//转化为了01背包for(int i=1;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]<<endl;return 0;
}
四、分组背包问题

有 N 组物品和一个容量是 V 的背包。

每组物品有若干个,同一组内的物品最多只能选一个
每件物品的体积是 vij,价值是 wij,其中 i 是组号,j是组内编号。

求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。

输出最大价值。
(1)F[i,j]:只在前i组里选,且总体积不超过j的最大价值(2)不选:F[i−1][j](3)选i组的第k个:F[i−1][j−v[i][k]]+w[i][k]\begin{align} &(1)F[i,j]:只在前i组里选,且总体积不超过j的最大价值\\ &(2)不选:F[i-1][j]\\ &(3)选i组的第k个:F[i-1][j-v[i][k]]+w[i][k] \end{align} (1)F[i,j]:只在前i组里选,且总体积不超过j的最大价值(2)不选:F[i1][j](3)i组的第k个:F[i1][jv[i][k]]+w[i][k]

#include<iostream>
using namespace std;
const int N=110;
int n,m;
int s[N],v[N][N],w[N][N];
int f[N][N];
int main()
{cin>>n>>m;for(int i=1;i<=n;i++){cin>>s[i];for(int j=0;j<s[i];j++)cin>>v[i][j]>>w[i][j];}for(int i=1;i<=n;i++)for(int j=0;j<=m;j++){f[i][j]=f[i-1][j];   //不选for(int k=0;k<s[i];k++){if(j>=v[i][k]) f[i][j]=max(f[i][j],f[i-1][j-v[i][k]]+w[i][k]); //选第k个}}cout<<f[n][m]<<endl;return 0;
}
http://www.yidumall.com/news/40201.html

相关文章:

  • 甘肃省人民政府网站首页企业百度推广
  • 盐城 网站开发网络营销经典失败案例
  • 东莞微网站制作公司百度云服务器官网
  • 毕业设计做网站low中国企业培训网
  • 做内销网站推广链接
  • 学做网站需要java么微商软文范例
  • 网络营销的特征包括北京百度seo排名
  • 官网苹果13windows优化大师和鲁大师
  • 网站公司未来计划ppt怎么做靠谱的免费建站
  • 哪个网站做加盟在哪里推广比较好
  • 威海外贸网站建设联系方式茶叶seo网站推广与优化方案
  • 哪个网站做海报比较好网站建设策划方案
  • 做百度网站的公司哪家好seo下载站
  • 个人站长做电音网站网站开发与设计
  • 登录app广州做seo整站优化公司
  • 网站建设网站合同版本seo网站推广实例
  • 学习php做毕设网站方向免费站推广网站不用下载
  • 怎么做链接网站百度seo费用
  • 网站设计标准百度关键词优化曝光行者seo
  • 哪些公司经常做网站百度企业查询
  • 中山网站优化怎么做蛋糕
  • 制作充值网站深圳网络推广营销公司
  • 网站公司建设 中山网站页面的优化
  • 可以自己做网站大型seo公司
  • 专业做京东网站吗杭州seo博客
  • 京东网站建设目的企业seo排名
  • 网站做兼容处理怎么网络营销首先要
  • dedecms插件成都网站优化及推广
  • 手机网站返回顶部代码推广页面
  • 个人空间网站免费外贸网站都有哪些