动态规划
TriAzure
靡不有初,鲜克有终。
展开
-
POJ刷题记录-DP部分(初级)
1-POJ 2533 Longest Ordered Subsequencelis模板题 注意最开始记错的地方2-POJ 3176 Cow Bowling3-POJ 1837 Balance对于区间的平移处理4-POJ 1159 Palindrome5-POJ 1080 Gene6-POJ POJ 1836 Alignment7-POJ 1015 Jury Compromise...原创 2019-06-05 18:26:41 · 269 阅读 · 0 评论 -
POJ 1080 Gene
本题收获:1 利用字符ascii值来替代数组下标,使代码更清晰2 注意dp数组初始化时不是统一初始化为0,是依次错开所有位置(与-对应的情况)而且对于这些情况需要累加#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namesp...原创 2019-06-04 19:36:37 · 144 阅读 · 0 评论 -
待解决POJ 1836 Alignment
(lis+lds)max 为什么一直WA本题的收获:1 读题要仔细,题目说的是“相等或者大于都不可以”,并且“左右有一边满足条件即可”。这两点一开始都没看清楚,浪费了很多时间。2 找lis lds交界点的时候,注意两个下标之间的关系,和起始点的选取(下次遇到这种情况可以现在草稿纸上写一写)3 注意中间的一种特别情况,中间位置的两个值可以相等。#include <iostream&g...原创 2019-06-04 19:33:55 · 117 阅读 · 0 评论 -
待解决POJ 1015 Jury Compromise
一直WA 应该是有特判没有想到 待解决这个题的收获:1 除了dp数组外还可以额外开数组做记录的作用2 应用了和之前Balance题里一样的思想,平移区间(最开始做的时候直接对cha[i]求了绝对值,其实是错的,动手算一下就会发现先绝对值再加和与先加和再绝对值的结果是不一样的)3 最后打印结果的时候,要找到差最小的dp数组,注意可能出现距离400距离相等的两种情况,这时候要判断哪边和大。4...原创 2019-06-04 19:30:25 · 139 阅读 · 0 评论 -
POJ 1159 Palindrome
问要将给定字符串变为回文字符串,最少插入多少个字符。难点在于想清楚“如何转变为回文字符串”,若为回文字符串,则正序逆序完全相同,也就是lcs长度等于字符串长度。所以如果要求插入字符的数量,就是正序逆序串lcs的长度减去字符串的长度。还有一个问题是,如果直接这么写空间是不够的。要用到滚动数组。因为dp是上下状态之间的转移,所以只需要有两个位置,一个保存上一状态,一个用于通过上一状态计算出当前...原创 2019-06-03 17:43:58 · 168 阅读 · 0 评论 -
POJ 3176 Cow Bowling
POJ 3176给你一个三角形状的数字塔,从塔尖数字开始,只能向当前点下方相邻的两个点移动,直到移动到最后一行为止。将途中经过的所有数字相加,求最大的和是多少。看到别人说是LCS问题……我没看出来哪里和LCS有关系T Tdp[i][j]表示以第i行第j个数字为终点时和的最大值。这样我们求出dp[N][j]之后,只需要遍历一遍所有的j,找到最大的就是当前的答案了。不难理解,如果以dp[i][j...原创 2019-05-29 20:25:41 · 115 阅读 · 0 评论 -
POJ 1837 Balance
POJ 1837给出numc个位置,numg个砝码。砝码只能挂在给出的位置上且所有的砝码都必须被使用,问使天平平衡的方案有多少个。首先要知道,天平平衡相当于:Σlength左 *weight左 + Σlength右 *weight右 = 0(题目中说了左边的位置取-)dp数组dp[i][j]表示取到第i个筹码时,天平的平衡状态。平衡状态即 B = Σlength左 *weight左 + Σl...原创 2019-05-29 19:38:58 · 159 阅读 · 0 评论 -
牛客21738 牛牛与数组
21738 牛牛与数组#include <iostream>using namespace std;/*1:长度为n**2:每一个数都在1到k之间**3:对于任意连续的两个数A,B,A<=B 与(A % B != 0) 两个条件至少成立一个**请问一共有多少满足条件的数组,对1e9+7取模**1 ≤ n ≤ 10 1 ≤ k ≤ 100000*//**...原创 2019-06-05 22:00:50 · 452 阅读 · 0 评论 -
POJ 1018 Communication System
这道题跟那天做到的jury很像,第一感觉是开dp,dp[i][j],j参数记录题目要求的B P的其中一个,然后dp[i][j]的值来表示另外一个。当时觉得最后算max(Bmin/Psum)的时候还需要再开一个path[][]记录路径。开始写之后发现其实用不到。dp的核心还是在于当前状态与“上一”状态的关系,换句话说真正用得到的就只有两个状态。这里虽然看起来每次都要比较min{b1,b2,b3,b...原创 2019-06-05 20:47:41 · 106 阅读 · 0 评论 -
POJ 1163 The Triangle
其实跟保龄球那个题是一模一样的#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define MAX_N 100int triangle[MAX_N+10][MAX_N+10], dp[MAX_N+10][MAX_N+10];int main()...原创 2019-06-05 18:48:47 · 87 阅读 · 0 评论 -
POJ 1014 Dividing
同HDU 1059 细节见这里#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define MAX_N 210005 //最多20000件int marblenum[7], marblevalue[7]={0,1,2,3,4,5,6}, ...原创 2019-06-05 18:32:06 · 130 阅读 · 0 评论 -
POJ 1276 Cash Machine
仔细推了一下利用二进制优化时使用的公式,注意n的取值范围,因为取对数,所以数组不用开那么大,100就够用。#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define MAX_V 1000#define MAX_N 1000#define MAX...原创 2019-06-05 18:28:57 · 152 阅读 · 0 评论 -
POJ 2533 Longest Ordered Subsequence
考察Lis。但是做的时候一直WA,才发现自己记的lis模板是错的。不是dp[1]=1,而要放到循环里,对每个i初始化一遍dp[i]=1。后面基因的题一直WA也是这里出错了。#include <iostream>#include <cstdio>using namespace std;#define MAX_N 1000int dp[MAX_N+1], num[M...原创 2019-06-04 19:38:27 · 71 阅读 · 0 评论