随笔分类 - DP—基本dp
摘要:题目链接题意:给出一条长为n个单位长度的直线,每通过一个单位长度需要t秒。有3种塔,红塔可以在当前格子每秒造成x点伤害,绿塔可以在之后的格子每秒造成y点伤害,蓝塔可以使通过单位长度的时间增加z秒。问如何安排3种塔的顺序使得造成的伤害最大,输出最大伤害值。分析:比赛的时候实在是没有想出来有三种不同的 ...
阅读全文
摘要:题目链接BFedya and Maths按照题目的公式求数,有一个规律4的倍数为4,然后就是大数取模,但是我还二的把strlen(s)放到了循环上,导致了每次循环都要算一次,最后超时。本来很简单的,, 简直惨。。。 1 #include 2 #include 3 #include 4 #inc...
阅读全文
摘要:题目链接题意:给一个数组a,从中选择一些元素,构成两个数组s, t,使s数组里的所有元素异或等于 t数组里的所有元素 位于,求有多少种构成方式。要求s数组里 的所有的元素的下标小于 t数组里的所有的元素的下标。分析:比赛的时候,刚开始脑子很乱,后来想了一下思路也敲了,发现自己的程序结果不对自己一点一...
阅读全文
摘要:题目链接这道题也是想了好长时间了, 一直没有写出来,想过一下思路,都wa了,看了题解以后才明白的。题意:给定N个柱子,现在要在这N个柱子之间摇摆,直至到达最右端的那一个柱子,问最少要摇摆多少次. 摇摆的时机是在开始的时候或者是从某一点摇摆到某个对称的点时,保证所有的柱子的高度不低于出发点的高度.分析...
阅读全文
摘要:题目链接完全自己想的,做了3个小时,刚开始一点思路没有,硬想了这么长时间,想了一个思路,又修改了一下,提交本来没抱多大希望 居然1A了,感觉好激动。。很高兴dp又有所长进。题意: 一个row*col的矩阵,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少。最北...
阅读全文
摘要:题目链接又是一道完全自己想出来的dp题。题意:一个w*h的图中,有n个点,给一个s*t的圈,求这个圈能 圈的最多的点分析:d[i][j]代表i行j列 到第一行第一列的这个方框内有多少个点, 然后枚举圈的右下角的点,计算在圈的范围的点的方法为d[i][j]-d[i][j-s]-d[i-t][j]+d[...
阅读全文
摘要:题目链接自己想的思路,做了两个多小时,又改了一会,dp还是要认真想啊。。。希望慢慢有进步。题意:给一个m个字符的字符串,全是小写字母,一共有n个不重复的字母,分别给出n个字母的插入和删除费用,删除或插入任意字符 使 字符串成为回文串,求最小的费用。分析:d[i][j]表示从 i 到 j 变成回文的最...
阅读全文
摘要:题目链接题意:有好多行,每行两个数字,代表大象的体重和智商,求大象体重越来越大,智商越来越低的最长序列,并输出。思路:先排一下序,再按照最长上升子序列计算就行。还有注意输入,刚开始我是这样输入的 cnt = 1;while(~scanf("%d%d", &p[cnt].w, &p[cnt++].s...
阅读全文
摘要:题目链接题意:给N,第二行是答案,n个数c1---cn, 代表第一个的顺序是c1,第二个数顺序是c2;下面每一行是学生的答案,格式同上。注意:这个给的顺序需要处理一下,不能直接用。思路:LCS。 1 #include 2 #include 3 #include 4 #include 5 #i...
阅读全文
摘要:题目链接自己的dp, 不是很好,这道dp题是 完全自己做出来的,完全没看题解,还是有点进步,虽然这个dp题比较简单。题意:一个k叉树, 每一个对应权值1-k, 问最后相加权值为n, 且最大值至少为d 的路径有多少条。思路:d[i][l][sum] 表示第i 行最大值为l, 总和为sum的路径数。注意...
阅读全文
摘要:题目链接题目:LabyrinthTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 519Accepted Submission(s): 174Prob...
阅读全文
摘要:题目题意:有n1个o, n2个r, n3个z, n4个~, 求有多少种组合使 组合出来的字符串的任意前缀都满足 o的个数>=r的个数,r的个数>=z的个数 ……………………思路:递推,枚举用四重循环控制orz~的个数符合题意, 然后当前个数的orz~等于之前orz~分别少一个推过来的,所以相加上,注...
阅读全文
摘要:题目题意: 给一个字符串 ,判断最少插入多少个字符 使字符串成为回文串, 并输出回文串。思路:先用dp判断需要个数, 再递归输出路径。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #define ...
阅读全文
摘要:题目以前做过的一道题, 今天又加了一种方法 整理了一下。。。。。题意:给出一个字符串,问要将这个字符串变成回文串要添加最少几个字符。方法一:将该字符串与其反转求一次LCS,然后所求就是n减去 最长公共子串的长度。额,,这个思路还是不是很好想。LCS: 1 #include 2 #include 3 ...
阅读全文
摘要:题目思路:edit(i, j),它表示第一个字符串的长度为i的子串到第二个字符串的长度为j的子串的编辑距离。有如下动态规划公式:if i == 0 且 j == 0,edit(i, j) = 0if i == 0 且 j > 0,edit(i, j) = jif i > 0 且j == 0,edit...
阅读全文
摘要:题目求括号的最大匹配数。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 bool match(char a, char b)10 {11 ...
阅读全文
摘要:做了三个题,先贴一下代码。。。终于涨分了A. Line to Cashier水题 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 const int INF = (1>n)15 {16 Min = INF;17 for(i = 0; i >a[i];19 for(i = 0; i >b;26 ans += b*5;27 }28 ...
阅读全文
摘要:题目链接题意:给n个数字, 求有k个数字的上升子序列有多少种。思路:d[i][j]表示 以第i个元素为 子序列的最后一个元素,长度为j的子序列 有多少种。比赛的时候 光想着用组合数做了。。。。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int maxn = 110; 8 9 __int64 d[maxn][maxn];10 int a[maxn];11 int main()12 {13 __int64 ans;14 int k, i, ...
阅读全文
摘要:题目链接题意:n个人, 要完成a个x任务, b个y任务。求,最短的时间思路:由于时间较大,用 二分来找时间。dp[i][j]表示 i个人完成j个x任务, 最多能完成的y任务个数这个题 不是很好想, 还参考了一下大神的博客 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int maxn = 1000+10; 8 int d[55][205]; 9 10 int _max(int a, int b)11 {12 return a>b?a:b;13 }14 ...
阅读全文
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=1421思路:d[i][j] 表示前i 个,k对的最小值。这个题还是不太好想状态方程,初始化以后,还要分一下情况。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int maxn = 2000+10; 8 const int maxm = 1000+10; 9 const int INF = 1y?y:x;16 }17 int main()18 {19 int ...
阅读全文

浙公网安备 33010602011771号