![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DAG动态规划
Chen丶HC
这个作者很懒,什么都没留下…
展开
-
HDUOJ 2577 How to type
#ifdef _DEBUG #pragma warning(disable : 4996) #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #includ原创 2017-08-01 19:34:13 · 190 阅读 · 0 评论 -
HDUOJ 2084 数塔
#ifdef _DEBUG #pragma warning(disable : 4996) #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #includ原创 2017-08-10 16:40:51 · 226 阅读 · 0 评论 -
HDUOJ 1506 Largest Rectangle in a Histogram
利用已经找到了的左右边界加快寻找过程。 这也是一种递推的思想#ifdef _DEBUG #pragma warning(disable : 4996) #endif #include #include #include #include #include #include #include #include #include #include #include #inclu原创 2017-08-18 10:52:36 · 173 阅读 · 0 评论 -
例题9-1 城市里的间谍(A Spy in the Metro, ACM/ICPC World Finals 2003, UVa1025)
思路: 1. 定义状态dp[pos][time], 表示从此状态到终点需要的等待时间。 2. 预处理出每个状态是否有向左或向右的火车。 3. 记忆化搜索的优点在于思路清晰,无需考虑递推顺序,注意仅dp[n][T] = 0。 4. 采用填表法进行递推,dp[i][j] = min(dp[i][j+1]+1, dp[i+1][j+ti], dp[i-1][j+t(i-1)])。#includ原创 2017-12-11 10:36:05 · 282 阅读 · 0 评论 -
例题9-2 巴比伦塔(The Tower of Babylon, UVa 437)
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define SF(a) scanf(原创 2017-12-12 09:25:29 · 242 阅读 · 0 评论 -
Codeforces 598E Chocolate Bar
思路: 1. 首先注意到数据组数为1e4,每次算出的结果保留,待下次查询。 2. 定义状态dp[i][j][k]为边长i,j的矩形要得到k块所需的最小花费。 3. 注意状态转移,每次行列切割后,不是直接转移的到dp[i][j - a][k - a*i]之类。应当进行枚举,把目标k分散至分割后的部分。#include #include #include #include #includ原创 2017-12-14 14:35:39 · 262 阅读 · 0 评论 -
Codeforces 918D - MADMAX (记忆化搜索)
思路: 必胜状态:存在一个后继是必败状态 由dp[u][v][c] -> dp[v][x][e.c],意思是A走一步后,轮到B走,相当于先手在B 记忆化搜索实现即可#include #include #include #include using namespace std; const int maxn = 105; struct Edge { int to, w;原创 2018-02-01 13:22:03 · 299 阅读 · 0 评论 -
Codeforces 919D - Substring (dp + 拓扑排序)
思路: 定义状态dp[i][j]表示在 i 点,j出现的最大次数,利用拓扑排序更新状态#include #include #include using namespace std; const int maxn = 300005; int n, m; char s[maxn]; vector edges[maxn]; int ans; int dp[maxn][26]; int q[m原创 2018-02-03 10:13:16 · 314 阅读 · 0 评论