"Link" 蒟蒻做的为数不多的环形$dp$,技巧不到位,写题解来总结一下。 $\text{Solution:}$ $dp$柿子还是很好推出来的:$dp[i][j]$表示地$i$个点染色是$j$的方案数。先考虑没有限制的转移: $$dp[i][j]=\sum_{k\not=j} dp[i 1][k] ...
分类:
其他好文 时间:
2020-05-03 12:27:00
阅读次数:
51
一、题目说明 题目739. Daily Temperatures,返回一列数,改天要等多少天才能升温。难度是Medium! 二、我的解答 这个题目,用dp解决非常方便: 性能如下: ...
分类:
其他好文 时间:
2020-05-03 12:17:03
阅读次数:
48
这类题目的往往可以采用暴力穷举的办法,但其时间复杂度过高。因此,这里采用动态规划的方法求解。设定一个状态集合dp[numsSize]与nums[numsSize]一一对应,对dp[0]初始化为nums[0],之后的每一个状态都赋值为max{nums[i], nums[i]+dp[i-1]},这里的意 ...
分类:
其他好文 时间:
2020-05-03 10:43:12
阅读次数:
54
共菜鸡笔者看的……会慢慢更新,也请看到的大佬留意一眼,指出不足。 对于一些对部分点的二维$dp$,状态从左上角继承而来时,对于一个点$(x,y)$,对它编号$x m+y$,按照这个顺序$dp$,可以保证更新当前值之前前面的已经被更新。 善于发掘题目的性质。对于一些一眼看上去没法$dp$的东西,观察题 ...
分类:
其他好文 时间:
2020-05-03 09:11:30
阅读次数:
74
"Link" 题目大意:给定$n$个二元组,每次可以选择一组,花费是组内最大的长乘以最大的宽。问消掉所有二元组的最小代价。 $\text{Solution:}$ $dp$写的不够啊…… 先挖掘一下题目性质,对于一个二元组,如果它的长和宽都可以被某一个二元组覆盖掉,则它显然是可以被并掉的,于是我们去掉 ...
分类:
其他好文 时间:
2020-05-03 01:03:44
阅读次数:
46
题目如上,一个背包类 dp 问题。感觉该题的解题思路算是相当经典了,小记一下。 做这个题有如下感悟: 1、dp 是一个运筹学问题,做题时不要忽略方程的本质:用小问题表示大问题,用函数表示函数。大问题可以用小问题表示,反过来,小问题的组合可以合并为大问题。在多维 dp 中要尤其注意,这可以帮助我们将一 ...
分类:
其他好文 时间:
2020-05-03 00:57:49
阅读次数:
57
把结论推出来就完事了 #include <bits/stdc++.h> #define maxn 100000005 using namespace std; int dp[maxn]; struct Node{ int l,w,h; bool operator <(const Node &b)co ...
分类:
其他好文 时间:
2020-05-03 00:40:07
阅读次数:
47
1 class Solution 2 { 3 // 状态 dp[i][j] : 表示 s 的前 i 个字符和 p 的前 j 个字符是否匹配 (true 的话表示匹配) 4 // 状态转移方程: 5 // 1. 当 s[i] == p[j],或者 p[j] == ? 那么 dp[i][j] = dp[ ...
分类:
其他好文 时间:
2020-05-02 23:19:47
阅读次数:
105
``` #include #include #include using namespace std; const int N = 500; int f[N][N]; int h[N], e[N], ne[N], idx; int n, p; int ans = 0x3f3f3f3f; int in... ...
分类:
其他好文 时间:
2020-05-02 22:51:03
阅读次数:
56
```//f[i]表示从前i头牛中选,且合法,的所有方案,价值最大//第i头选或不选都可以//不选:变成f[i-1]//选i:需要知道从i开始往前连续选了多少个,最多是k//如果是x个,那么就加上w[i-x+1]+w[i-x+2]...+w[i],也就是s[i]-s[i-j]//那么再往前选的话,下... ...