----动态规划----
acunstoppable
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ1065 动态规划 LIS
题意: 求偏序集链的最小划分数。 思路: 1、贪心; 2、利用Dilworth定理转化成LIS模型。 反思: Dilworth定理:偏序集中链的最小划分数 = 最长反链长度。 代码: 1、贪心#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 5原创 2018-03-16 00:35:21 · 255 阅读 · 0 评论 -
HDU5418 动态规划 状压DP
题意: 可多次拜访的类TSP问题。 思路: 状态转移方程:dp[s][v]=min(dp[s|{u}][u]+mp[u][v]) (u不属于s) 反思: 一个月没写代码,手都生疏了。五月份要加油!!! 代码:#include <cstdio> #include <vector> #include <cmath> #include <cstring> #include <iostream原创 2018-05-01 20:31:16 · 313 阅读 · 0 评论 -
POJ2184 动态规划 01背包
题意: 某物 i , 有两种属性值 s[i] 和 f[i] ,每件物品可取或不取,求最后S + F的最大值,同时保证S >= 0 且 F >= 0。(S 为取出的 s[i] 的总和, F为取出的 f[i] 的总和) 思路: 1、涉及到取与不取的问题,很自然地想到了背包。 “物品的价值”这个显而易见,但是“背包的容量”在哪里?我们可以把两个维度 T 和 S,任取一个当作“物品的价值”,另一个做原创 2018-03-26 01:55:30 · 247 阅读 · 0 评论 -
POJ2392 动态规划 多重背包
题意:多重背包。略有区别的是,背包容量是每种砖块的Ai,价值和费用都是Hi。 思路: 多重背包转化为01背包和完全背包。 反思: 迫使自己学习了二进制优化,挺好的。 代码:#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int MAXN原创 2018-03-25 22:14:37 · 269 阅读 · 0 评论 -
POJ3666&CF714E 动态规划
题意: 给定a序列,构造非严格递增或非严格递减的b序列,使得| a[0] - b[0] | + | a[1] - b[1] | + … + | a[n-1] - b[n-1] | 最小,并求出其值。 思路: 最开始的思路是这样的: 假设构造的序列是非严格单调增的。 dp[i][j]:b序列的前i+1个数已成单调序列且最后一个元素为j时的最小成本。 转移方程:dp[i][j] = min原创 2018-03-17 17:06:50 · 236 阅读 · 0 评论 -
POJ1631 动态规划 LIS
题意: 求LIS。 思路: 反思: 1、学习了求LIS的O(nlogn)算法思想; 2、注释掉的部分为求LIS路径的代码。 代码:#include <cstdio> #include <algorithm> #include <cmath> #include <iostream> #include <stack> using namespace std;const int MAXN =原创 2018-03-17 01:12:29 · 224 阅读 · 0 评论 -
HDU1114 动态规划 背包 多重背包
题意:给定一能容纳一定重量的储钱罐 和 各种面额硬币的重量(数量无穷), 问恰好装满储钱罐时,罐内价值总和之最小。 思路:多重背包模板题。#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; const int MAXN = 500 +原创 2017-08-12 09:58:28 · 265 阅读 · 0 评论 -
HDU1260 动态规划 简单DP
题意:买电影票有 单人购票 和 相邻两人团购 两种方式,给你队列人数及每人两种购票方式所花时间,问最小花费时间。 思路:定义状态dp[0][i]为i-1未买团票,i买完后的最少花费时间,dp[1][i]为i-1是团票,i买完后的最少花费时间。#include <iostream> #include <cstring> #include <algorithm> #include <iomanip>原创 2017-08-12 09:54:41 · 312 阅读 · 0 评论 -
CF917B 动态规划 记忆化搜索
题意: Max和Lucas两人在DAG(边上有权重,为字符ASCⅡ码)顶点上进行博弈游戏。Max先行,且每人此轮走的边的权值需不小于对手上一轮走的边的权值,若某人无路可走,则输掉游戏。求Max和Lucas两人在任意起点的博弈结果。 思路: dp[i][j][c]:当Max位于i,Lucas位于j,且此前的最大权值为c,当Max移动时,Max的输赢情况(1为胜,0为负)。 如果存在k,#inc原创 2018-01-30 21:50:23 · 452 阅读 · 0 评论 -
POJ1742 动态规划 多重背包
题意: 问多重部分和能否恰好等于m。 思路: dp[i][j]:用前i种面额硬币凑成j后,第i种硬币最多剩下的个数,若凑不成则为-1.可优化空间复杂度。 反思: 想不出应该如此定义dp数组。 代码:#include <cstdio>using namespace std;int a[100 + 10]; int c[100 + 10]; int dp[100000 + 10];int m原创 2018-03-10 16:39:34 · 183 阅读 · 0 评论 -
动态规划 FZU2236 树状数组优化
题意: 这题是求一个数列中严格递增子序列的个数。比如数列(1,3,2)的严格递增子序列有(1)、(3)、(2)、(1,3)、(1,2),共5个。长得一样的但是位置不同的算不同的子序列,比如数列(3,3)的答案是2。 思路: 1、类LIS问题: dp[i] = sigmadp[j] + 1(j < i && a[j] < a[i]) 2、离散化 + 树状数组 反思: 代码:#include原创 2018-05-03 23:37:12 · 267 阅读 · 0 评论
分享