
基础算法 -- 动态规划
Object_S
Java C++
展开
-
P2519 [HAOI2011]problem a
题目地址 易错点: 可以将每个人的话转化为一个相同分数段,即[b+1,n-a]。如果某个区段分数的人数超过了区段长度,就有超过区段长度数量的人说假话. #include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int N=100010; stru...原创 2019-07-19 08:54:59 · 115 阅读 · 0 评论 -
P2893 [USACO08FEB]修路Making the Grade
题目地址 易错点: 由于数据太水,将序列变成单调不下降并计算最小花费即可. 可以考虑枚举每一段路i和每一个高度j,则dp[i][j]=min(dp[i][j-1],dp[i-1][j]+cost) 高度j范围太大,利用贪心的思想可以将所有可能的高度离散化. 此时dp[i][j]=min(dp[i][j-1],dp[i-1][j]+abs(a[i]-b[j]). 考虑到边界条件j=1...原创 2019-07-20 15:21:51 · 141 阅读 · 0 评论 -
AW274 移动服务
题目地址 易错点: 滚动数组的技巧:dp[i&1]=dp[(i-1)&1]+1. 直接dp(dp[i][x][y][z])的话复杂度开不下,可以考虑减少一维. 容易发现对于每一个任务,在这个任务被执行之前一定有一个人在上一个任务的位置. 因此可以枚举上一个任务其中两个人所在的位置,那么另一个人一定在上一个任务所要求的位置. 注意需要特判某个位置已经有人的情况. 滚...原创 2019-07-20 18:36:17 · 121 阅读 · 0 评论 -
P1004 方格取数
题目地址 易错点: 注意样例的位置点数量与n的关系 . #include<cstdio> #include<iostream> using namespace std; const int MAXN=12; int a[MAXN][MAXN],dp[MAXN][MAXN][MAXN][MAXN]; int main(){ int n; scanf("%d",...原创 2019-07-21 12:46:25 · 155 阅读 · 0 评论 -
P1006 传纸条
题目地址 易错点: 因为好感度最低为零且一定有答案,不需要额外处理好感度为零的位置. dp[i][x1][x2]=max(dp[i-1][x1][x2],...,dp[i-1][x1-1][x2-1]). #include<cstdio> #include<iostream> using namespace std; const int MAXN=105; in...原创 2019-07-21 18:45:54 · 114 阅读 · 0 评论