![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
ORZZROORZZRO
川大的小可爱
展开
-
照亮体育馆 Barisal Stadium
UVA10641题目为逆时针顺序编号,这里直接将数组开两倍来处理环。(然而不知为啥开到1000也能过)定义:Corners[i]Corners[i]Corners[i]为体育馆点的坐标。Lights[i]Lights[i]Lights[i]为灯的坐标及费用。IsShineOnCur[i]IsShineOn_{Cur}[i]IsShineOnCur[i]表示第CurCurCur盏灯是否能...原创 2020-01-24 02:49:36 · 1323 阅读 · 0 评论 -
禁止的回文子串 Dyslexic Gollum
UVA1633一个长的回文串都可以由短的回文串拓展而来,只要短的回文在左右两端增加相同的字符即可。因此,在考虑长度为NNN的01串时,只要在从长度为1向NNN拓展的过程中,保证后KKK个字符不是回文串即可。定义:dp[i][j]dp[i][j]dp[i][j]为考虑长度为i的串的后KKK个字符组成的子串为jjj时的合法字符串的数量。IsPalindrome[i][j]IsPalindrom...原创 2020-01-23 23:08:24 · 240 阅读 · 0 评论 -
棒球投手 Pitcher Rotation
UVA1379定义:Map[i][j]Map[i][j]Map[i][j]为对战第i支队伍时,胜率排名第j位的棒球手的胜率Schedule[i]Schedule[i]Schedule[i]为第i天的对手dp[i][a][b][c][d]dp[i][a][b][c][d]dp[i][a][b][c][d]为考虑到前i天时,第i天派出胜率排名第a位,第i-1天排除第b位,第i-2天排出第c位,...原创 2020-01-23 01:35:36 · 422 阅读 · 0 评论 -
佳佳的筷子 Chopsticks
UVA10271首先,将筷子逆序读入,即使得读入的ChopsticksChopsticksChopsticks数组中的元素时降序的。这样在考虑前iii只筷子时可以选iii和i−1i-1i−1,而第三只(最大那只)在i−1i-1i−1之前选一个没被用过的即可。定义:dp[i][j]dp[i][j]dp[i][j]为考虑前i个筷子并选了j个三元组后的最小权值和。初始化:dp[i][0]=0...原创 2020-01-22 22:41:16 · 784 阅读 · 1 评论 -
学习向量 Learning Vector
UVA12589预处理:首先,我们将所有向量按斜率从大到小排序。因为在连上某个向量时,在他之前的向量都会为它贡献底部的面积。观察题目的图,可以发现除了第一个向量之外,剩下向量新增的面积都是由底部一个矩形和上面一个三角性组成,而三角形只和当前向量有关,当矩形面积等于当前的总高度乘当前向量的长。因此,向量放的越早,其为后续贡献的矩形面积就越多,因此选择先放斜率大的。定义:dp[i][j][k...原创 2020-01-22 21:57:17 · 496 阅读 · 0 评论 -
仓库守卫 Storage Keepers
UVA10163这道题需要两次dp1. 求最小安全指数最大值定义:dp[i][j]dp[i][j]dp[i][j]为考虑前i个人看守前j个仓库最小安全指数最大值,SafetyIndex[i]SafetyIndex[i]SafetyIndex[i]为第iii个人的能力值。初始化:dp[i][0]=infdp[i][0]=infdp[i][0]=inf(常数/0=无穷大)剩下的dp=0...原创 2020-01-22 16:15:57 · 339 阅读 · 0 评论 -
阿里巴巴 Alibaba
UVA1632这是一个区间动态规划定义:dp[i][j][0]dp[i][j][0]dp[i][j][0]为阿里巴巴收集完iii到jjj的宝藏后位于iii位置的最短耗时,dp[i][j][1]dp[i][j][1]dp[i][j][1]为阿里巴巴收集完iii到jjj的宝藏后位于jjj位置的最短耗时。(在最短耗时情况下,阿里巴巴收集完某个区间的宝藏后只能位于区间的边缘,不可能在内部,因为在内部的...原创 2020-01-22 02:45:00 · 3103 阅读 · 0 评论 -
密码锁 Locker
UVA1631定义:dp[i][x][y][z]dp[i][x][y][z]dp[i][x][y][z]为达到第iii个数字之前已经解锁,第iii个数为xxx,第i+1i+1i+1个数为yyy,第i+2i+2i+2个数为zzz的状态最少需要转动几下。详见注释AC代码:#include<iostream>#include<string>#include<cs...原创 2020-01-22 01:28:41 · 2381 阅读 · 0 评论 -
电子人的基因 Cyborg Genes
UVA10723有两个字符串S1,S2S_1,S_2S1,S2,求能包含他们的最短串。显然S1+S2S_1+S_2S1+S2可以包含S1S_1S1,又包含S_2,但是却不一定是最短的。为什么呢?因为S1,S2S_1,S_2S1,S2中有公共的子序列,这些子序列实际上最后只需要出现一次,而非两次。在S1+S2S_1+S_2S1+S2中就把这些公共的子串被计算了两次。比如样例中的...原创 2020-01-21 03:44:35 · 2945 阅读 · 0 评论 -
串折叠 Folding
UVA1630这是一个区间动态规划定义:dp[i][j]dp[i][j]dp[i][j]为iii到jjj的字符串能压缩成的最小长度,dps[i][j]dps[i][j]dps[i][j]保存iii到jjj的字符串能压缩成的最短字符串,S[i]S[i]S[i]表示第iii个字符(从1开始编号)。初始化:dp[i][i]=1dps[i][i]=S[i]dp[i][i]=1\\dps[i][i...原创 2020-01-21 02:03:02 · 250 阅读 · 0 评论 -
切蛋糕 Cake slicing
UVA1629定义:UpperLeftUpperLeftUpperLeft为矩形左上角,LowerRightLowerRightLowerRight为右下角。dp[UpperLeft.x][UpperLeft.y][LowerRight.x][LowerRight.y]dp[UpperLeft.x][UpperLeft.y][LowerRight.x][LowerRight.y]dp[Upp...原创 2020-01-20 16:35:35 · 495 阅读 · 0 评论 -
免费糖果 Free Candies
UVA10118定义:dp[a][b][c][d]dp[a][b][c][d]dp[a][b][c][d]为第0列取了aaa颗糖果,第1列bbb颗,第二列ccc颗,第三列ddd后剩下的糖果还能最多再装进口袋多少个。那么答案就是dp[0][0][0][0]dp[0][0][0][0]dp[0][0][0][0],即考虑所有糖果。Candies[i][j]Candies[i][j]Candies[...原创 2020-01-20 14:42:56 · 248 阅读 · 0 评论 -
校长的烦恼 Headmaster's Headache
UVA10817定义:s0s_0s0为没人教的科目的集合,s1s_1s1为恰好有一人教的科目的集合,s2s_2s2为至少有两人教的科目的集合。则定义dp[i][s1][s2]dp[i][s_1][s_2]dp[i][s1][s2]为考虑前i名教师时科目情况为相应科目情况为s1,s2s_1,s_2s1,s2时的最小花费。AllSetAllSetAllSet为全集。这里的集合采用二进...原创 2020-01-20 01:27:21 · 427 阅读 · 0 评论 -
完美的服务 Perfect Service
UVA1218定义:Son[i]Son[i]Son[i]为第iii个节点的子节点集dp[i]dp[i]dp[i]为以iii为根节点的最少服务器需求量dp[i][0]dp[i][0]dp[i][0]为将第iii个节点作为服务器的时的情况,即它的子节点既可以是服务器,又可以是客户端。dp[i][1]dp[i][1]dp[i][1]为第iii个节点为客户端且它的父节点为服务器的情况,即它的子...原创 2020-01-19 17:00:03 · 2137 阅读 · 0 评论 -
Party at Hali-Bula
UVA1220这是一个树上dp问题,求树的最大独立点集。首先,将所有名字都赋予一个编号,这里使用map。定义:dp[i][0]dp[i][0]dp[i][0]为以第iii名员工为根且第iii名员工不参加晚会的最优答案,dp[i][1]dp[i][1]dp[i][1]为第iii名员工参加晚会的答案;IsRepeat[i][0]IsRepeat[i][0]IsRepeat[i][0]为dp[i...原创 2020-01-19 15:21:35 · 343 阅读 · 0 评论 -
Another Crisis
UVA12186 定义:dp[i]dp[i]dp[i]为要使第iii名员工向其上级发信最少需要多少工人,DP(i)DP(i)DP(i)返回dp[i]dp[i]dp[i]的值,Son[i]Son[i]Son[i]为第iii名员工的所有直属下级。每一个员工都只有一个直接上级,因此不会有两个工人由同一上级。#include<iostream>#include<string&g...原创 2020-01-19 02:26:16 · 398 阅读 · 0 评论 -
Brackets sequence
UVA1626这是一道区间动态规划。定义:dp[i][j]dp[i][j]dp[i][j]为从第iii个字符到第jjj个字符组成的子串要成为正规子串最少要添加多少字符,SSS为字符串。初始化:dp[i][i]=1dp[i][i]=1dp[i][i]=1一个字符必定需要补充另一个才能匹配。dp[i+1][i]=0dp[i+1][i]=0dp[i+1][i]=0在转移方程中的dp[i]...原创 2020-01-19 01:39:43 · 1267 阅读 · 0 评论 -
Cutting Sticks
UVA10003这是一道区间动态规划定义:dp[i][j]dp[i][j]dp[i][j]为第iii个切割点到第jjj个切割点之间的木条的最小切割费用,Point[i]Point[i]Point[i]为第iii个切割点的位置。初始化:dp[i][i+1]=0dp[i][i+1]=0dp[i][i+1]=0因为相邻切割点之间没有切割点,不需要切割。Point[0]=0Point[n+1...原创 2020-01-18 19:02:01 · 1751 阅读 · 0 评论 -
划分成回文串 Partitioning by Palindromes
UVA11584这道题需要两次dp第一次定义:SSS为字符串,IsPalindrome[i][j]IsPalindrome[i][j]IsPalindrome[i][j]为第iii个字符到第jjj个字符组成的子串是否为回文i≤ji\leq ji≤j。初始化:IsPalindrome[i][i]=trueIsPalindrome[i−1][i]=(S[i]==S[i−1])IsPalin...原创 2020-01-18 17:11:29 · 2900 阅读 · 0 评论 -
Lighting System Design
UVA11400定义:dp[i]dp[i]dp[i]为考虑前种中灯泡的最小花费,PrefixSum[i]PrefixSum[i]PrefixSum[i]为前i种灯泡的需求量之和(前缀和)。初始化**:for (int i = 0; i < n; ++i) { dp[i] = lamps[i].K + PrefixSum[i] * lamps[i].C; }即前i种灯泡的需求都...原创 2020-01-18 16:27:41 · 415 阅读 · 0 评论 -
Jin Ge Jin Qu hao
UVA12563定义:dp[i][j]为考虑前i首歌并且总时长为j时最多能唱的歌曲数,Song[i]表示第i首歌的时长。转移方程:dp[i][j]=max(dp[i−1][j],dp[i−1][j−Song[i]])dp[i][j]=max(dp[i-1][j],dp[i-1][j-Song[i]])dp[i][j]=max(dp[i−1][j],dp[i−1][j−Song[i]])经...原创 2020-01-17 00:43:22 · 1657 阅读 · 0 评论 -
Unidirectional TSP
UVA116定义:dp[i][j]dp[i][j]dp[i][j]为从第iii行第jjj列走到最后一列的最小整数和,Road[i][j]Road[i][j]Road[i][j]为在最优方案下第iii行第jjj列的下一步的行数(记录路径),Map[i][j]Map[i][j]Map[i][j]表示第iii行第jjj列的数。代码从0编号到n−1n-1n−1,而题目是1到nnn,所以会有些不一样。...原创 2020-01-16 22:06:45 · 465 阅读 · 0 评论 -
The Tower of Babylon
UVA437一种砖块的三个边都可以当作高度,因此n中砖块对应有3*n中搭砖方式。定义:dp[i]为一第i中方式为底的最大高度,blocks[i]为第i中搭砖方式。#include<iostream>#include<algorithm>#include<cstring>using namespace std;int n, dp[91];struc...原创 2020-01-16 17:08:38 · 282 阅读 · 0 评论 -
A Spy in the Metro
UVA1025定义:dp[i][j]dp[i][j]dp[i][j]为在第iii时刻间谍到达第j个车站时在车站待的最短时间,RightTrain[i][j]RightTrain[i][j]RightTrain[i][j]表示在第iii时刻是否有从左向右开的列车,LeftTrain[i][j]LeftTrain[i][j]LeftTrain[i][j]同理。初始化:dp[0][1]=0dp[0...原创 2020-01-16 15:26:49 · 1583 阅读 · 0 评论 -
Game of Sum
题目链接题意:有一个长度为n的整数序列,两个人AAA和BBB轮流取数,AAA先取。一个玩家每次只能从左端或者右端取任意数量连续的数,但不能两边同时取。当所有的数都被取走时游戏结束,然后统计每个人取走的数的和,作为各自的得分。两个人采取的策略都是让自己得分尽可能高,并且两个人都很机智,求AAA的得分−B-B−B的得分后的结果。显然,最后整数序列的所有元素必定被AAA或BBB取得。定义:dp[...原创 2020-01-15 23:38:25 · 366 阅读 · 0 评论 -
And Then There Was One
题目链接约瑟夫环问题假设有nnn个数,编号为0,1,2,⋯n−10,1,2,\cdots n-10,1,2,⋯n−1,其中0和n−1n-1n−1相连,形成一个环,如图:.......0123n从0开始数kkk个,将这个数从环中移除,再数kkk个,再移除,问最后一个数是多少。假设n=7,k=3n=7,k=3n=7,k=3。那么第一次删除2,数列变成:0123456...原创 2020-01-15 00:46:57 · 337 阅读 · 0 评论 -
动态规划入门例题
题目链接A - 数字组合小蒜有 n(1≤n≤20)个正整数,找出其中和为 t(t 也是正整数)的可能的组合方式。如:n=5,5 个数分别为 1,2,3,4,5,t=5;那么可能的组合有 5=1+4和 5=2+3和 5=5三种组合方式。输入格式输入的第一行是两个正整数 n 和 t,用空格隔开,其中 1≤n≤201≤n≤201≤n≤201≤n≤201 \le n \le 201≤n≤201≤n≤...原创 2019-12-15 06:12:21 · 1813 阅读 · 0 评论