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

河南免费网站建设公司推荐网页代码查看

河南免费网站建设公司推荐,网页代码查看,做网站需要多大空间,平面设计类网站今天重点学习动态规划问题。在使用递归解决问题时可能会产生性能问题,动态规划算法是为了解决递归产生的性能问题。递归会产生大量的重复问题,可以用空间换时间,用一种数据结构记录所有已经解决的问题。以数据结构为核心,从小问题…

今天重点学习动态规划问题。在使用递归解决问题时可能会产生性能问题,动态规划算法是为了解决递归产生的性能问题。递归会产生大量的重复问题,可以用空间换时间,用一种数据结构记录所有已经解决的问题。以数据结构为核心,从小问题回归得到大问题。首先设计一个数据结构,记录不同规模的答案,数据结构采用从小到大的方式去生成。

第一题是放苹果,通过一个二维dp数组记录信息。

#include <stdio.h>
#include <cstring>
using namespace std;
int main()
{int dp[13][13] = {0};//dp[m][n]就是m个苹果放入n个盘子int m, n;while(scanf("%d%d", &m, &n)!=EOF){memset(dp, 0, 13*13);for(int i = 0;i<=m;i++){dp[i][1] = 1;//只有一个盘子}for(int i = 1;i<=n;i++){dp[1][i] = 1;//只放一个苹果dp[0][i] = 1;//1个苹果都不放}for(int i = 2;i <=  m;i++){for(int j = 2; j <=n;j++){if(i >= j){//applenum > platenumdp[i][j] = dp[i][j-1] + dp[i-j][j];}else {dp[i][j] = dp[i][j-1];}}}printf("%d\n",  dp[m][n]);}return 0;
}

第二题是吃糖果。简单动归,可以吃一块或者两块。

#include <stdio.h>
using namespace std;
int main(){int dp[20]={0};dp[1] = 1;//一块巧克力只有一种方案dp[2] = 2;//两块巧克力有两种方案int N;scanf("%d", &N);for(int i = 3;i<=N;i++){dp[i] = dp[i - 1]+dp[i-2];//可以选择吃一块或者吃两块}printf("%d", dp[N]);
}

下面学习和线性数据结构相关的动态规划问题,两个序列求最长公共子序列,一个序列内的最大子序列和等等。两个线性表或一个线性表和他本身做对比,希望得到最值,这种需要动态规划。

第三题是最长公共子序列。dp[i][j]表示0~i-1 0~j-1的子序列的最长公共长度,若当前遍历元素相同,则dp[i][j]=dp[i-1][j-1]+1,若不同,则dp[i][j]=max(dp[i][j-1], dp[i-1][j])。

#include <stdio.h>
#include  <string.h>
#include <algorithm>
using namespace std;
int dp[1002][1002];
int main(){int n, m;char s1[1001];char s2[1001];scanf("%d%d", &n, &m);scanf("%s%s", s1, s2);//dp[i][j] s1的前i个元素 s2前j个元素的最大公共长度for(int j = 0; j<=m;j++){dp[0][j] = 0;//s1的一个元素也没处理}for(int i = 0; i<=n;i++){dp[i][0] = 0;}for(int i = 1;i<=n;i++){for(int j = 1;j<=m;j++){//s1[0]~si[i-1] s2[0]~s2[j-1]if(s1[i-1] == s2[j - 1]){dp[i][j] = dp[i-1][j-1] + 1;}else {dp[i][j] = max(dp[i-1][j], dp[i][j-1]);}}}printf("%d\n", dp[n][m]);}

第四题是最长公共字串。

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
short dp[10001][10001];
int main(){char s1[10001];char s2[10001];scanf("%s%s", s1,s2);int n = strlen(s1);int m = strlen(s2);for(int j = 0; j <= m;j++){dp[0][j] = 0;}for(int i = 0;i<=n;i++){dp[i][0] = 0;}short curmax = 0;for(int i = 1; i <= n;i++){for(int j = 1;j<=m;j++){if(s1[i-1]>='a'&&s1[i-1]<='z'&&s1[i-1] == s2[j-1]){dp[i][j] = dp[i-1][j-1]+1;curmax = max(dp[i][j], curmax);}else {//连不起来dp[i][j]=0;}}}printf("%d\n", curmax);return 0;
}

第五题是最大子序列和,dp数组代表从头到下标i元素的最大序列和。

#include <vector>
#include <stdio.h>
#include <algorithm>
using namespace std;
int main(){int N;scanf("%d", &N);vector<long> vec1;for(int i = 0; i<N;i++){int val;scanf("%d", &val);vec1.push_back(val);}int size = vec1.size();vector<long> res;res.push_back(vec1[0]);long curmax = res[0];for(int i = 1; i< vec1.size();i++){long curnum = max(res[i-1]+vec1[i], vec1[i]);res.push_back(curnum);curmax = max(curmax, curnum);}printf("%ld", curmax);
}

第六题是最大子矩阵。

#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int main(){int n;while(scanf("%d", &n)!=EOF){if(n == 0) break;vector<int> start(10002);//记录当前元素为结尾的最大连续子序列的起始下标vector<int> vec(10002);//记录数组元素vector<int> dp(10002);//以i为下标元素对应的最大连续子序列和for(int i = 0; i<n;i++){scanf("%d", &vec[i]);}dp[0] = vec[0];start[0] = 0;int curmax = dp[0];for(int i = 1; i<n;i++){int val1 = dp[i-1]+vec[i];int val2 = vec[i];if(val1>=val2){dp[i] = val1;start[i] = start[i-1];}else {dp[i] = vec[i];start[i] = i;}curmax = max(curmax, dp[i]);}if(curmax<0) printf("0 %d %d\n",vec[0],vec[n-1]);else {for(int i = 0;i < n;i++){if(dp[i] == curmax){printf("%d %d %d\n", curmax, vec[start[i]], vec[i]);break;}}}}
}

第七题是最大上升序列和。

#include <stdio.h>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int main(){int n;while(scanf("%d", &n)!=EOF){int dp[1000];//下标为i 的最大上升序列和vector<int> vec;for(int i=0;i<n;i++){int val;scanf("%d", &val);vec.push_back(val);}int maxsum = 0;for(int i = 0; i<n;i++){dp[i] =vec[i];for(int j = 0; j<i;j++){if(vec[i]>vec[j]){dp[i] = max(dp[j] + vec[i], dp[i]);}}maxsum = max(dp[i], maxsum);}printf("%d\n", maxsum);}
}

下面学习01背包问题,首先明确dp数组的含义,dp[i][j]代表下标为0~i之间的物品,任取然后放进容量为j的背包里。不放物品i,dp[i][j] = dp[i-1][j],放物品i,dp[i][j] = dp[i-1][j-weight[i]] + value[i]。dp[i][j]为两者的最大值。明天继续。


文章转载自:

http://QFHhUG0N.Lfjmp.cn
http://4VSPY9YJ.Lfjmp.cn
http://VCQ4P6kc.Lfjmp.cn
http://amYeIe3Q.Lfjmp.cn
http://yNJXmbe8.Lfjmp.cn
http://JtmnEb81.Lfjmp.cn
http://S2dn69g8.Lfjmp.cn
http://o8odKTvX.Lfjmp.cn
http://lV0YnpwK.Lfjmp.cn
http://AnmPHv39.Lfjmp.cn
http://qsru4l69.Lfjmp.cn
http://gzlkje2z.Lfjmp.cn
http://3j899BeZ.Lfjmp.cn
http://Z0H5SJVM.Lfjmp.cn
http://E6nOIqje.Lfjmp.cn
http://pPIaAeBt.Lfjmp.cn
http://5Aiju62t.Lfjmp.cn
http://iOXEQRCj.Lfjmp.cn
http://GlBZqtUt.Lfjmp.cn
http://9jieDACn.Lfjmp.cn
http://1o9oYW3z.Lfjmp.cn
http://aMX72Q1G.Lfjmp.cn
http://LUgR5yan.Lfjmp.cn
http://UoasHP6k.Lfjmp.cn
http://zyqxHWEl.Lfjmp.cn
http://1GWZDFv5.Lfjmp.cn
http://9LjfetM8.Lfjmp.cn
http://FsJzyUWu.Lfjmp.cn
http://DwJe2R3H.Lfjmp.cn
http://CK78Q1qo.Lfjmp.cn
http://www.dtcms.com/wzjs/769889.html

相关文章:

  • 高大上的网站欣赏太原网页设计公司
  • 河南省建设部省厅网站中国做投资的网站
  • 哈尔滨网站空间可以进入的网站
  • 网站开发职业认知小结网站建设报表明细
  • 杭州网站备案广东企业建网站
  • 雕刻机做外贸都是哪些网站深圳装修公司口碑排行
  • wordpress汉化优化网站费用
  • 做网站都需要学什么语言阳西县网络问政平台公众号
  • 设计素材网站会员it行业有哪些职业
  • 公司网站建设一条龙网站规划与建设ppt
  • 自己做的网站怎么发布视频教程广州网站优化效果
  • 网站建设找北冥有鱼网站做多少外链
  • 怎么用dw网站怎么建设视觉差网站制作
  • 网站怎么实现邮件验证手机淘宝网官网
  • 网站页码北京设计机构
  • 邓亚萍20亿做网站绍兴越城区建设局网站
  • 网页播放视频 网站开发旅游网站开发方案ppt
  • 高端响应式网站陵水网站建设装修设计公司
  • 洛阳网站制作建设如何申请一个网址
  • 南阳在线网站制作wordpress 5.0.2 发布失败
  • 宜兴宜兴建设局网站温州网络优化公司
  • 贵阳市城乡建设学校网站北京网站设计学校
  • 刷网站排名怎么刷学网站建设学校
  • 泊头哪里建网站呢创建站点的方法
  • 国外浏览器网站html黑什么主题WordPress
  • 如何苗木网站建设电商网站前端源码
  • 怎么做淘宝联盟网站推广广州网站优
  • 苏州网站优化排名推广西安的网站设计公司名称
  • 河南城乡建设厅网站证书查询wordpress 论坛系统
  • 建个网站的电话广告策划公司