![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
SLX_better
这个作者很懒,什么都没留下…
展开
-
动态规划——problem B
大意: 最长公共子序列,如果相同那么dp[i][j] = dp[i-1][j-1] + 1,否则就取max(dp[i][j-1],dp[i-1][j])#include # include # include using namespace std; int max(int a,int b) { return a>b ?a : b;原创 2016-05-11 20:56:44 · 338 阅读 · 0 评论 -
动态规划——problem g
都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由于小径两侧都不能站人,所以他只能在小径上接。由于gameboy平时老呆在房间里玩游戏,虽然在游戏中是个身手敏捷的高手,但在现实中运动神经特别迟钝原创 2016-05-21 22:16:07 · 314 阅读 · 0 评论 -
动态规划——problem q
题意:有t个例子,然后输入n和v,n代表有多少骨头,v代表背包体积,每样东西只有一个,只能取一次思路:动态规划的思想,用空间换时间,过程中会产生大量之间数据,我们用一维数组来存储数据,背包九讲就是用二维数组来讲解#include #include #include using namespace std; const int N = 1005; int n原创 2016-05-19 22:30:27 · 267 阅读 · 0 评论 -
动态规划——problem n
题意:要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分思路:递推递推,先分析下直线分割平面的情况,增加第n条直线的时候,跟之前的直线最多有n-1个交点,此时分出的部分多出了(n-1)+1;f(1)=2,f(2)=7,先画好前面n-1条折线,当增加第n条拆线时,此时与图形新的交点最多有2*2(n-1)个,所以分出的部分多出了2*原创 2016-05-18 21:40:37 · 255 阅读 · 0 评论 -
动态规划——problem f
题意:要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?可以直接用递归计算,将数塔看成一棵树,用数组实现,分别递归的求出每棵子树的最大值 再进行比较,取其中每步的最大值,由底至上,逐层比较,最后的出最大和。 #include #define SIZE 100 int val[SIZE][SIZE]; i原创 2016-05-06 23:33:05 · 357 阅读 · 0 评论 -
动态规划——problem c
题意:从起点到终点,每次只能跳到比上一次大的点,问跳过的格子上和最大是多少。思路:求最长递增子序列,用动态规划。#includeusing namespace std;int main(){ int n; int i,j,max,max1; int w[1002],dp[1002]; while(cin>>n) {原创 2016-05-17 22:48:45 · 320 阅读 · 0 评论 -
动态规划——problemA
题意:求一个矩阵之内最大的一个子矩阵的和思路:每个数都有加到前面作为前面已经加好的和的增量和自己独立成为一个“最大和”的选择,在这两个选择中的最大和就是局部的最大和,而保存好第一个最大和,将整个序列的所有局部最大和都求解出来,就能得到全列的最大和#includeint main(){ int i,ca=1,t,s,e,n,x,now,before,max; sc原创 2016-05-05 20:42:58 · 306 阅读 · 0 评论 -
动态规划——problem l
题意:在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.思路:f(1)=1,f(2)=2,f(3)=5,当有n个方格的时候,有两种铺法:先铺好n-1个格,有f(n-1)个方法,再铺第n层的时候只有一种方法,所以总方法是1*f(n-1);先铺好n-2格,有f(n-2)个方法,再铺后面两层的时候只能两个都竖着铺(否则与第一种情况重复),所以也只有一种情况,原创 2016-05-16 16:05:04 · 293 阅读 · 0 评论 -
动态规划 ——problem k
题意:有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数思路:小蜜蜂只能从某个编号的蜂巢开始爬行,所能爬向的格子最多只能到编号+2的那个格子。比如从2格子开始爬,第一次爬只能到达3,4,5这两个格子。只需要知道后面状态的值,就可以推出前面状态的值。用自底向上的方法逐步填充DP表。#include #include #i原创 2016-05-16 14:58:56 · 297 阅读 · 0 评论 -
动态规划——problem o
Give you a number on base ten,you should output it on base two.#includeint main(){int n,i,j,a[100];while(scanf("%d",&n)!=EOF){i=0;while(n){a[i]=n%2;n=n/2;i++;}for原创 2016-05-14 23:05:47 · 272 阅读 · 0 评论 -
动态规划——problem j】
题意有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?思路:递推问题。利用非彼纳西公式:F(n) = F(n-1) + F(n-2) 进行推导#include #includeusing namespace std;int main(){int a[5],n;while(cin>>n&&n!=0){for(i原创 2016-05-13 12:17:37 · 319 阅读 · 0 评论 -
动态规划——problem m
problem m有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?思路:去年的母牛,只要没有死,今年仍在因此有f(n-1)头,今年出生的母牛有多少?大前年(第n-3年)有多少头母牛,那么到了今年这些牛都能生小牛了,出生数为f(n-3). #include #include using原创 2016-05-13 11:05:16 · 266 阅读 · 0 评论 -
动态规划 ——总结.
动态规划是解决多阶段决策问题的一种方法。如果一类问题的求解过程可以分为若干个互相联系的阶段,在每一个阶段都需作出决策,并影响到下一个阶段的决策,从而确定了一个过程的活动路线,则称它为多阶段决策问题。思想:在做每一步决策时,列出各种可能的局部,解依据某种判定条件,舍弃那些肯定不能得到最优解的局部解。以每一步都是最优的来保证全局是最优的。概念:阶段,状态,决策,状态转移方程动态规划原创 2016-05-21 23:44:29 · 284 阅读 · 0 评论