动态规划
NCU-wfb
go!go!go!
展开
-
动态规划-最长连续不下降子序列
题目描述:在一个数列中,找到一个最长的子序列(可以不连续),使得这个子序列是不下降(即非递减的)举例:A={1,2,3,-1,-2,7,9} (下标从1开始),它的最长不下降子序列为{1, 2,3, 7,9}分析:将dp[i]表示为以A[i]结尾的最长的非递减子序列dp[i]默认值为1,即只有它一个元素对i之前的元素进行遍历,判断是否A[j]<=A[i]以及dp[i] > dp[j]+1如果是,则状态转移方程为 dp[i] = dp[j] + 1;上代码```c++/.原创 2021-11-29 19:20:21 · 456 阅读 · 0 评论 -
动态规划-最大连续子序列和
题目描述:给定一个数列A1,A2, A3…An,求i,j (1<=i<=j<=n),使得Ai+…+Aj最大,输出这个最大和样例:-2 11 -4 13 -5 -2显然11+(-4)+13 = 20分析:我们将状态dp[i]表示为以A[i]结尾的最大连续子序列和默认dp[i] = A[i], 如果dp[i] < dp[i-1] + A[i], 则dp[i]设置为dp[i-1]+A[i]即状态转移方程为 dp[i] = max(dp[i], dp[i-1]+A[i]).原创 2021-11-29 19:09:10 · 610 阅读 · 0 评论 -
动态规划-数楼梯
先看题:分析:首先,这是一道典型的斐波那契类似题,同时,题目还有着高精度和动态规划的标签。我们可以定义一个dp二维数组用来存放高精度数值。动态转移方程为: dp[k][i] = dp[k-1][i] + dp[k-2][i]#include<bits/stdc++.h>using namespace std;//len表示数值的总位数//定义一个二维数组。例如dp[n][*]代表到第n阶阶梯有这么多种走法int len=1, dp[5005][2000];void.原创 2021-11-27 23:47:53 · 330 阅读 · 0 评论