动态规划专项
人面桃花相映红
BNU student
展开
-
买卖股票的最佳时机系列
读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 买卖股票的最佳时机 买卖股票的最佳时机 II 买卖股票的最佳时机 III 买卖股票的最佳时机 IV 最佳买卖股票时机含冷冻期 买卖股票的最佳时机含手续费 ----------- 很多读者抱怨 LeetCode 的股票系列问题奇技淫巧太多,如果面试真的遇到这类问题,基本不会想到那些巧妙的办法,怎么办?所以本文拒绝奇技淫巧,而是稳扎稳打,只用一种通用方法解决所用问题,以不变应万变。 这篇文章用状态机的技巧来...原创 2020-08-15 19:18:22 · 185 阅读 · 0 评论 -
poj 1189 钉子和小球
首先初始化dp[][],把dp[1][1]初始化为2^n,目的是为了是最后一个的的次数大于1; 然后用一个gcd()求一下最大公约数,然后没有然后了。 #include #include #include #include #define ll long long using namespace std; ll n,m; ll dp[55][55]; int gcd(ll a,ll b)原创 2017-04-27 17:03:01 · 284 阅读 · 0 评论 -
hdu 1069 最长下降子序列
点击打开链接 #include #include #include #include using namespace std; struct block{ int area; int height; int width; int length; }; b原创 2017-04-22 11:12:56 · 209 阅读 · 0 评论 -
最长下降子序列 nyoj 79
nyoj 79 http://acm.nyist.net/JudgeOnline/problem.php?pid=79&rec=rec#include <cstdio> #include <iostream> #include <algorithm> #include<string.h> using namespace std; int a[200]; int dp[200]; int res;原创 2016-10-06 21:02:46 · 174 阅读 · 0 评论 -
求最长公共子序列 递推
求最长公共子序列 递推 void solve() { for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (s1[i] == s2[j]) { dp[i + 1][j + 1] = dp[i][j原创 2016-09-20 21:55:47 · 236 阅读 · 0 评论 -
石油大 oj2707
题解: 动态规划问题 题目链接 http://exam.upc.edu.cn/problem.php?id=2707&csrf=Wc2LX9hWoq953nA9GeQCEbfN44TcZDMc 把mapp中记录当前的步数,初始化时记录为最大值, 当每走到一步时,都要考虑从当前一步的下一步开始,一直到从当前一步能够到达的位置求最小值。#include <stdio.h> #include <io原创 2016-10-04 10:29:17 · 445 阅读 · 0 评论 -
poj 3624 http://poj.org/problem?id=3624
空间优化后的的写法 for(i = 0; i<n; i++) { for(j = m; j>=w[i]; j--) { dp[j] = max(dp[j],dp[j-w[i]]+d[i]); } }01 背包问题 #include <stdio.h> #incl原创 2016-09-30 21:38:14 · 440 阅读 · 0 评论 -
数的组合问题
nyoj 32 http://acm.nyist.net/JudgeOnline/problem.php?pid=32 逆序输出所有的组合数,就是一个模板。int f(int m, int k)//找出从自然数1、2、... 、m(0<m<10)中任取r(0<r<=m)个数的所有组合。 { int i,j; for(i = m; i >= k; i--) {原创 2016-09-08 11:20:29 · 178 阅读 · 0 评论 -
poj 1088 滑雪问题http://poj.org/problem?id=1088
贪心+dp 自己没写出来 copy的 什么鬼啊 唉 还得努力啊#include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> #define N 101 using namespace std; int map[N][N],len[N][N]; int dir[4][2]={{-1,0},{0,1},{1原创 2016-10-04 16:52:53 · 259 阅读 · 0 评论 -
最长上升子序列
状态转移dp[i] = max{ 1.dp[j] + 1 }; j<i;a[j]<a[i]; d[i]是以i结尾的最长上升子序列 与i之前的 每个a[j]<a[i]的 j的位置的 最长上升子序列+1后 的值比较 void solve(){ // 参考挑战程序设计入门经典; for(int i = 0; i < n; ++i){原创 2016-09-22 21:53:26 · 160 阅读 · 0 评论 -
结构体三级排序(nyoj 17)
题目链接 :http://acm.nyist.net/JudgeOnline/problem.php?pid=17&rec=rec#include<stdio.h> #include<algorithm> using namespace std;typedef struct Node { int a,b,c; }; bool cmp(Node s1,Node s2) { if(s1.原创 2016-09-23 10:05:50 · 383 阅读 · 0 评论 -
hdu 1159 最长公共子序列
hdu 1159 最长公共子序列 http://blog.csdn.net/ninefailure/article/details/52056446 题解 求最长公共子序列 递推 void solve() { for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) {原创 2016-09-06 22:01:02 · 203 阅读 · 0 评论 -
求最长公共子序列 递推
求最长公共子序列 递推 void solve() { for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (s1[i] == s2[j]) { dp[i + 1][j + 1] = dp[i][j] + 1;原创 2016-09-04 10:34:13 · 336 阅读 · 0 评论