动态规划
俺叫西西弗斯
找份前端开发工作
都柏林理工大学博士拟录取(没钱读)
李莫瑞克大学硕士在读(主持爱尔兰软件研究中心)
重庆2022优秀毕业生
展开
-
[模板题]最长上升子序列
来源: 模板题算法题:动态规划,线性DP,最长上升子序列给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。#### 输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。#### 输出格式输出一个整数,表示最大长度。#### 数据范围1≤N≤1000,−1e9≤数列中的数≤1e9#### 输入样例:73 1 2 1 8 5 6#### 输出样...原创 2020-03-12 23:08:25 · 470 阅读 · 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 · 235 阅读 · 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 · 157 阅读 · 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 · 172 阅读 · 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 · 98 阅读 · 0 评论 -
[LeetCode]64. 最小路径和
算法标签 DP题目简叙思路典型DP数值累加状态转移方程如下:当前位置所处的 行与列 处于为边界时候: 当前的值即为 自身本身 当前位置所处的 行 处于为边界时候: 当前的值即为 上方 的累加当前位置所处的 列 处于为边界时候: 当前的值即为 左方 的累加当都不属于的时候 当前的值即为 上方和左方最小值 的累加代码class Solution {public: int minPathSum(vector<vector<int>>&原创 2020-07-23 23:06:11 · 155 阅读 · 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 · 133 阅读 · 0 评论 -
整数拆分问题
算法标签 动态规划题目思路数据N尽量拆分!最大不超过K1.初始化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 · 270 阅读 · 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-1else ansN+=ansN(N/2)代码#include <iostream>using namespace std;const int N=1e4;i原创 2020-07-20 14:50:43 · 101 阅读 · 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 · 511 阅读 · 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 · 321 阅读 · 0 评论