
动态规划
俺叫西西弗斯
找份前端开发工作
都柏林理工大学博士拟录取(没钱读)
李莫瑞克大学硕士在读(主持爱尔兰软件研究中心)
重庆2022优秀毕业生
展开
-
[模板题]最长上升子序列
来源: 模板题 算法题:动态规划,线性DP,最长上升子序列 给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。 #### 输入格式 第一行包含整数N。 第二行包含N个整数,表示完整序列。 #### 输出格式 输出一个整数,表示最大长度。 #### 数据范围 1≤N≤1000, −1e9≤数列中的数≤1e9 #### 输入样例: 7 3 1 2 1 8 5 6 #### 输出样...原创 2020-03-12 23:08:25 · 501 阅读 · 0 评论 -
[AcWing]898. 数字三角形
算法标签 线性DP 题目简叙 思路 当前的状态由左上或者上方的两个点决定 代码 #include<iostream> using namespace std; int n; const int INF=1e9; const int N=5e3+10; int f[N][N],a[N][N]; int main(){ cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=i;j++)原创 2020-08-04 16:45:05 · 249 阅读 · 0 评论 -
[LeetCode]剑指 Offer 63. 股票的最大利润
算法标签 DP 题目简叙 思路 维护一个当前与最小值的差值,维护一个最小值 DP直接走过去 代码 class Solution { public: int maxProfit(vector<int>& prices) { if(prices.size()==0)return 0; int min_price=prices[0],max_price=0; for(int i=0;i<prices.size();i++){原创 2020-07-27 18:51:08 · 183 阅读 · 0 评论 -
[LeetCode]剑指 Offer 47. 礼物的最大价值
算法标签 DP 题目简叙 思路 没什么好说的 特判断 沿边和起始情况 核心状态转移方程只有一行grid[i][j]+=max(grid[i-1][j],grid[i][j-1]); 代码 class Solution { public: int maxValue(vector<vector<int>>& grid) { int n=grid.size(),m=grid[0].size(); for(int i=0;i<n;i++原创 2020-07-27 18:29:35 · 188 阅读 · 0 评论 -
[LeetCode]剑指 Offer 42. 连续子数组的最大和
算法标签 DP 题目 思路 一维DP 原则就是查看是否添加上一个数字 正常而言只有左侧数字为整数就添加 否则就舍弃,自身作为新的一段 测试用例 [-2,1,-3,4,-1,2,1,-5,4] 标准输出 -2 1 -2 4 3 5 6 1 5 代码 class Solution { public: int maxSubArray(vector<int>& nums) { int res=-0x3f3f3f; for(int i=1;i<原创 2020-07-24 17:05:20 · 118 阅读 · 0 评论 -
[LeetCode]64. 最小路径和
算法标签 DP 题目简叙 思路 典型DP 数值累加 状态转移方程如下: 当前位置所处的 行与列 处于为边界时候: 当前的值即为 自身本身 当前位置所处的 行 处于为边界时候: 当前的值即为 上方 的累加 当前位置所处的 列 处于为边界时候: 当前的值即为 左方 的累加 当都不属于的时候 当前的值即为 上方和左方最小值 的累加 代码 class Solution { public: int minPathSum(vector<vector<int>>&原创 2020-07-23 23:06:11 · 181 阅读 · 0 评论 -
[LeetCode]1143. 最长公共子序列
算法标签:动态规划 题目简叙 代码 class Solution { public: int longestCommonSubsequence(string text1, string text2) { int strLen1=text1.size(),strLen2=text2.size(); vector<vector<int>>dp(strLen1+1,vector<int>(strLen2+1,0));原创 2020-07-20 18:00:21 · 150 阅读 · 0 评论 -
整数拆分问题
算法标签 动态规划 题目 思路 数据N尽量拆分! 最大不超过K 1.初始化 2.K>N 答案与f(K,N)相同 3.K=N 答案是F(K,N-1)+1 等于上一个答案拆分出来一个 4.k<N 答案是F(i-j,j)/包含J的情况/ +F(i,j-1)/所有数据都小于J的情况/ 代码 #include<iostream> using namespace std; int n,k; const int N=110; int dp[N][N]; int getAns(int n,原创 2020-07-20 17:51:54 · 283 阅读 · 0 评论 -
[洛谷]P1028 数的计算
相关标签 动态规划 题目简叙 思路 找规律 s=0 n=1 0; s=1 n=1 1; s=2 n=2 exm:12,2,s=3 n=2 exm:13,1; s=4 n=4 exm:14,13,24,124;s=5 n=4 exm:15,25,125,5; s=5 n=3 观察发现: if n%2==1 ansN=ansN-1 else ansN+=ansN(N/2) 代码 #include <iostream> using namespace std; const int N=1e4; i原创 2020-07-20 14:50:43 · 117 阅读 · 0 评论 -
[第十一届蓝桥杯省赛C++B组]走方块
文章目录算法标签:DP题目简叙思路代码AC截图 算法标签:DP 题目简叙 思路 1.i== 2|| j==2不可走 2.边缘初始化一步 3.当前位子的可能等于左边和上边的数量之和:dp[i][j]=dp[i-1][j]+dp[i][j-1]; 代码 #include<iostream> #include<cstring> using namespace std; int main(){ int n,m; cin>>n>>m;原创 2020-07-13 23:24:03 · 535 阅读 · 1 评论 -
[计蒜客][动态规划]蒜头君爬楼梯
题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛) 算法标签 动态规划 题目描述 思路 我到第二个台阶方案数是由1步,2步两种情况 我到第一个台阶只有一步,1种情况 我到第三个台阶方案书是前两种情况的总和 AC代码 #include<iostream> using namespace std; const int N=1100; const int mod = 100007 ; int a[N]={0,1,2}; int main() { int n; cin>>原创 2020-05-21 17:39:28 · 345 阅读 · 0 评论