dp
xuelanghu407
纵使前途渺茫,也不能阻止我前进的脚步,怀着无限的热爱,投入到无限的ACM,即使是遍体鳞伤,也无后悔之心,毕竟曾经为着一个理想、目标奋斗过。
展开
-
codeforces 682 D. Alyona and Strings
D. Alyona and Strings题意题目类似与求两个字符串的最长公共子序列,不过有个要求是这个公共子序列需是由不超过k段子串组成。这些字串需在两个原串中一样出现。思路LCS再加一维限制子串个数。并预处理出公共子串。code#include <cstring>#include <iostream>using namespace std;#define MAXN (1000 + 5)int原创 2016-07-14 09:37:32 · 295 阅读 · 0 评论 -
uva 437 dp
UVA 437 - The Tower of Babylon给了一堆a*b*c的石头,求最高能堆多高,石头使用不限次数。 每个石头可以视为6个石头,对其底面大小进行排序,然后类似最长上升子序列的做法。#include <bits/stdc++.h>using namespace std;struct Node { int a, b, c; Node(){} Node(in原创 2015-09-08 11:45:17 · 349 阅读 · 0 评论 -
uva 473 dp
UVA 473 - Raucous Rockers给出n首歌, m张磁盘,每张可以存t分钟歌曲。和每首歌的时间。歌曲必须按顺序存放。 以磁盘的存储情况为状态,dp[i][j][k]表示前i首歌存在前j个磁盘并且第j个磁盘花了k分钟的最大存储歌曲数量。第i-1首歌可能存在第j个磁盘或者第j-1个磁盘。得出转移dp[i][j][k]=max{dp[i−1][j][k−a[i]]dp[i−1][j−1]原创 2015-09-10 14:40:43 · 381 阅读 · 0 评论 -
uva 672 dp
UVA 672 - Gangstersn个歹徒打算打劫一个饭店。饭店的门在[0, k]的范围变化。第i个歹徒在t[i]时刻来到饭店,能打劫到p[i]的钱,但至于门的状态等于s[i]时才能进去打劫。问这n个歹徒最多能拿到多少钱。(1≤N≤100,1≤K≤100,0≤T≤300001 \le N \le 100, 1 \le K \le 100, 0 \le T \le 30000) (0≤Ti≤T0原创 2015-09-10 14:55:17 · 406 阅读 · 0 评论 -
uva 590 dp
UVA 590 - Always on the run小偷要从城市1经过k天道城市n,给出这n个城市之间的航班表,要求第k天到城市n的最小花费。dp[i][j] 第i天小偷在城市j的最小花费。枚举第i-1天其所在的城市k,找出(k-j)在第i天的航班价格s,dp[i][j] = min(dp[i-1][k] + s);#include <bits/stdc++.h>using namespace原创 2015-09-10 14:50:43 · 449 阅读 · 0 评论 -
zoj 3329 概率dp 环
一个游戏,你手上有三个骰子,分别有k1, k2, k3面。每次投出这三个骰子,得到三个面x, y, z。并且你有一个计数器,如果投出a, b, c, 则计数器归零,否则计数器加上三面之和,计数器初始为零。如果计数器的值大于 n 则游戏胜利。求胜利所需投骰子次数的期望。 以计数器的值为状态,dp[i] 表述计数器的值为i的情况下投骰子的期望。得到转移方程 p[k] 表示投出点数总和为k的概率,k=原创 2015-08-02 15:49:27 · 579 阅读 · 2 评论 -
uva 11552 dp
UVA 11552 - Fewest Flops一个字符串,字符串每 k 个当作一组,组中的字符顺序可以重组。问经过重组后改字符串可以编程最少由多少块字符组成。连续的一段字符被称为块。dp[i][j] 表式第i组以字符j结尾的最少块数。 那么我们考虑添加一组后可以减少块数的情况。 1):上一组的结尾在这一组里找得到同样的字符,并且该字符不作为当前块的结尾。如果要作为结尾的话要把该字符所在的块拆开原创 2015-08-16 00:31:52 · 627 阅读 · 0 评论 -
uva 10534 dp
UVA 10534 - Wavio Sequence定义一种 Wavio 的序列。其长度为2*n+1,前n+1严格递增,后n+1个严格递减。 求在给的序列中找一个最长的 Wavio 子序列。输出长度。正向LIS求出每个点以该点为结尾的最长上升子序列长度p[i],然后反向LIS求出以该点位开头的最长递减子序列长度q[i]。然后枚举 Wavio 子序列的中点,该店的 Wavio 长度为 2 * min原创 2015-08-16 00:29:51 · 610 阅读 · 0 评论 -
uva 11404 dp
UVA 11404 - Palindromic Subsequence求给定字符串的最长回文子序列,长度一样的输出字典序最小的。对于 [l, r] 区间的最长回文串,他可能是[l+1, r] 和[l, r-1]两个区间的结果。或者当s[l] == s[r]时,区间[l+1, r-1]的结果再加上以s[l], s[r]为首尾的子序列。dp[l][r]原创 2015-08-16 21:16:03 · 519 阅读 · 0 评论 -
uva 1456 dp 求期望
UVA 1456 - Cellular Network大致意思可以理解为有n个盒子,盒子里面放球的概率为p[i],把这n个盒子分成k组,按顺序打开每组的盒子。求打开盒子找到球的需要拆盒子数的期望。按概率从大道小排序,贪心选择概率大的盒子先拆,然后维护概率的前缀和。dp[i][j]表示前i个盒子被分成j组的找到小球的期望。dp[i][j] = min{dp[k][原创 2015-08-16 21:19:26 · 397 阅读 · 0 评论 -
UVA 11584 dp
UVA 11584 - Partitioning by Palindromes求一个字符串最少可以被分为几个回文字串。如aaadbccb 可以被分为aaa d bccb 三个。n^2预处理出w[i][j],即i到j段是否为回文。为回文的条件为s[i] == s[j] 并且w[i+1][j-1]为回文。如此,我们以位子i为状态,dp[i]表示在i之前的字符最少可以被分为多个子回文串。dp[i] = m原创 2015-08-16 00:26:20 · 630 阅读 · 0 评论 -
uva 11795 状压dp
UVA 11795 - Mega Man's MissionMega 要去解决n个机器人,每解决一个机器人可获得若干把武器。每个机器人只能被特定的武器解决。给出Mega 现有的武器,和解决i号机器人可以获得的武器,求Mega 完成任务的方案数。状压dp枚举当前已经解决的机器人状态s,根据s 我们可以得到Mega 现有武器状态k ,通过k 我们可以得出状态 s 再解决一个机器人后原创 2015-08-16 21:21:24 · 385 阅读 · 0 评论 -
uva 1424 dp
UVA 1424 - Salesmen给出一副图,并且给出nhn走过的路径记入,路径可能是错的,问最少修改几个地方可以使得路径是正确的。dp[i][j] 表示修改第i个位置为j点的前i个位置的最小修改次数。 dp[i][j] = min(dp[i-1][k] + (j == a[i])); {w[k][j] == true 即存在路径k~j}然后再最后一个点找一个最小值。#include <cst原创 2015-08-16 00:28:15 · 595 阅读 · 0 评论 -
uva 1452 dp 约瑟夫环
UVA 1452 - Jump约瑟夫环。对于一个n个人,没k个踢出去的约瑟夫环。踢出一个人后,环成了0, 1, 2, ... ,k-2, k, k+1, ... ,n对其从k为起点重新编号 n-k+1, n-k+2, ... ,n-1, 0, 1, 2, ...n-k这样变成了一个(n-1, k)的约瑟夫环问题。于是得到转移方程原创 2015-08-16 21:25:27 · 508 阅读 · 0 评论 -
Codeforces Round #105 D. Bag of mice 概率dp
http://codeforces.com/contest/148/problem/D题目意思是龙和公主轮流从袋子里抽老鼠,袋子里有白老师 W 只,黑老师 D 只,公主先抽,第一个抽出白老鼠的胜利,龙每次抽的时候会随机跑出一只老鼠。给出W和D要你求出公主胜利的概率。对于dp[w][d]表示有w只白老鼠d只黑老鼠的情况下公主胜利的概率,如果公主第一次就抽出白鼠,概率是 w/(w+d)原创 2015-07-23 00:32:41 · 888 阅读 · 2 评论 -
zoj 3822 概率dp
Edward 喜欢下棋,每天下班他会把一个棋子放到棋盘中空闲的位置,有一天他发现棋盘 was dominated by the chess pieces,意思就是每一行,每一列都至少有一个棋子在上面。Edward 觉得很有趣,他想知道在一个N*M的棋盘中摆成这样的情况需要的天数的期望是多少。 14年牡丹江现场赛的题目。现在看来也不算是特别难了吧?题目主要卡手的地方我觉得在于棋子只能放在空闲的地方。原创 2015-08-01 21:22:13 · 687 阅读 · 0 评论 -
hdu 5378 概率dp 逆元
一棵n个节点的树。对其节点进行标号(1~n)。求恰好存在k个节点的标号是其节点所在子树的最大值的方案数。首先,总共有n!中标号方案。而如果求出n个节点中出现k个上述节点的概率p。方案数等于n!* p。dp[i][j] 表示钱i个节点有j个上述节点的概率。转移较容易推出。dp[i][j] = dp[i-1][j] * (c[i]-1) / c[i] + dp[i-1][j-1]原创 2015-08-14 00:13:17 · 1044 阅读 · 2 评论 -
poj 3744 概率dp 矩阵快速幂优化
一位童子兵要穿过一条路,路上有些地方放着地雷。这位童子兵非常好玩,走路一蹦一跳的。每次他在 i 位置有 p 的概率走一步到 i+1 ,或者 (1-p) 的概率跳一步到 i+2。童子兵初始在1位置,求他安全通过这条道路的概率。以所在位置为状态,dp[i] 表示在位置 i 的安全的概率。dp[i] = p * dp[i-1] + (1 - p) * dp[i-2]; // i 位置原创 2015-07-31 17:08:29 · 1359 阅读 · 0 评论 -
uva 10453 dp
UVA 10453 - Make Palindrome给出一个字符串,可以在任意位置插入任意字符,求使其变成回文串最少要插入多少字符,并给出可行解。 一开始打算dp[l][r]表示(l, r)区间的插入最少字符组成的回文串(string)。然后再转移。最后发现严重tle,然后改记忆化为for循环还是好慢。果然string那里有个O(n),要改算法了。如果只要求至少要插入多少字符还是好办的,而要找可原创 2015-09-08 11:36:37 · 292 阅读 · 0 评论 -
uva 10163 dp
UVA 10163 - Storage Keepers公司有N(1 ≤ N ≤ 100)个仓库,需要安保。现在有M(1 ≤ M ≤ 30)个人应聘职位,每个人有个值Pi (1 ≤ Pi ≤ 1000);安排第i个人看守k个仓库,则这k个仓库的安全值是Pi/k,并且花费为Pi。公司要保证所有仓库的最小安全值尽可能的大,求解这个值并且求这个方案的最小花费。dp[i][j]:表示安排前i个人看守j个仓库能原创 2015-09-08 11:17:27 · 1424 阅读 · 0 评论 -
codeforces 682C. Alyona and the Tree
codeforces 628C. Alyona and the Tree题意有一颗树,树上的点和边都有权值。要求删除树上若干节点,使得树上每个节点u到其子树上的节点v的dis(u,v)≤a(u)dis(u, v) \le a(u)。问最少需要删除多少个节点。思路类似与最大连续子段和的思想,对于每个节点是否要保留,在于是否有从根节点方向到以他为结尾的树链的权值比其点权大,有则删除该子树,无则保留该节点原创 2016-07-14 09:26:05 · 347 阅读 · 0 评论 -
codeforces 688 E. The Values You Can Make
E. The Values You Can Make题意Pari 从自己的n个硬币中给了Arya K元钱,现在他想知道Arya能用这k元钱凑出哪些钱数。思路dp[i][j][k]表示前i个硬币中,给Arya总共j元钱,Arya能否凑出k元钱。 于是Pari选择把第i+1个硬币不给Arya则 dp[i+1][j][k]|=dp[i][j][k];dp[i+1][j][k] |= dp[i][j][原创 2016-07-14 09:56:45 · 359 阅读 · 0 评论 -
Astar Round2A 1002 Sitting in Line 记忆化搜索
Sitting in Line题意给出n个数,和确定部分数的位置。要求最大的 ∑i=1n−1(a[i]∗a[i+1])\sum_{i=1}^{n-1}(a[i]*a[i+1])思路从左到右前m个用的数字集市S,且最右边是pr的最优解。 dp[S][pr]=max(dp[s‘][i]+a[pr]∗a[i])dp[S][pr] = max(dp[s`][i]+a[pr] * a[i])code#in原创 2016-05-21 21:25:51 · 400 阅读 · 0 评论 -
codeforces 615 C. Running Track trie + dp
题意输入两个字符串S和T。用S的子串和其子串的反转来凑T,要求尽可能的少使用子串数量。思路把S串的子串插入trie树中。dp[i]表示T串的i到结尾最少要用到多少个S的子串。dp[i]=min(dp[j]+1);dp[i] = min(dp[j] + 1);其中T的i到j-1的子串必须在trie树中。路径还原。trie树中的每个节点都要记录该串的起点和终点。反串用负数记录较为方便。再用pr数组记录转原创 2016-02-29 20:22:39 · 353 阅读 · 0 评论 -
hdu 1171 Big Event in HDU 费用可行性背包 dp
题意一个学院分成了两个学院,于是他们要分一些公共设备。总共有n种设备,每种设备的价值v[i]和数量m[i],要求分配的时候尽可能的让两个学院分到的价值接近。并且保证第一个学院分得的价值不小于第二个学院。求最佳分配结果。思路要尽可能的平均分配,就是尽可能地用这些设备凑成总价值的一半。而只需要知道那种价值能否凑出来。code#include <bits/stdc++.h>using namespace原创 2016-02-26 14:01:56 · 283 阅读 · 0 评论 -
codeforces 629 D. Babaei and Birthday Cake dp + 线段树
题意有n个圆柱形蛋糕,现在需要把他们叠在一起,要求标号小的蛋糕在下面,并且要求保证下面的蛋糕的体积严格的比上面的小。思路类似于“最重子序列”,用dp[i]以第i个蛋糕为最高的能得到的最大的体积。dp[i] = max(dp[j] + a[i].v);,此时j要满足两个条件,j蛋糕的标号要比i小,并且j的体积要比i的体积小。此时我们可以对蛋糕的体积排序,这样从左往右进行dp的时候便可以保证体积的大小关原创 2016-02-22 16:05:26 · 440 阅读 · 0 评论 -
codeforces 633C. Spy Syndrome 2 trie + dp
题意间谍通过一些规则吧密信进行了加密。现在需要你对其解密。加密规则是把密文全部改成小写字母,然后翻转每个单词。并删去空格。现在给你加密后的文字和字典,要你找出原来的密文。思路因为密文的单词是翻转后的,所以我们可以把字典里的单词翻转,存进字典树中。dp[i]表示i之前是否能组成正确的信息(true)。 dp[j] = dp[i] 当dp[i]为真,并且(i, j-1)能在字典树中找到。路径还原,其实原创 2016-03-03 20:16:44 · 421 阅读 · 0 评论 -
codeforces C. Famil Door and Brackets dp
题意有个字符串由(,)组成。并且从左往右数时保证(的数量不小于),并且括号是匹配的。现在给该串中间的一部分,求符合要求的串的个数。思路简单的想法就是枚举给出串的左边的(,)的个数,然后计算出另一个串的个数。然后相乘,累加。于是要保证这样填充的时候满足串的要求。这个可以根据符号个数进行判断。dp[i][j] 表示i个(j个)满足题目要求的情况下的方案数。dp[i][j] = dp[i-1][j] +原创 2016-03-01 18:03:43 · 323 阅读 · 0 评论 -
2011 Asia Dalian Regional Contest
D - Hexadecimal View題意把一行字符轉換成16進制的ASCAL碼,每行16個字符,倆倆間空格,還要輸出十六進制的行號。並在最右面輸出該行的代表的字符串,大寫換消小寫,小寫換大寫。思路模擬唄,兩位16進制可以用%2x\%2x直接輸出,但是行號有前導靈所以得自己寫。code讀一行直到文件末尾:while (gets(str) != NULL) {}E - Number String題意原创 2015-10-25 12:16:31 · 523 阅读 · 1 评论 -
Codeforces #313 (Div. 1) C. Gerald and Giant Chess dp 组合数 逆元
描述有一个 h×wh \times w 的棋盘,需要从左上角走到右下角。每次只能向右或者向下走一步。其中有 nn 个格子被标记成不能就经过,这些格子的坐标为(ri,ci)(r_i, c_i)。问走到右下角可以有多少种方案数。 (1≤h,w≤105,1≤n≤2000,1≤ri≤j,1≤ci≤w,ansmod109+7)(1 \le h,w \le 10^5, 1 \le n \le 2000, 1原创 2015-09-21 12:44:49 · 418 阅读 · 0 评论 -
codeforces 566F. Clique in the Divisibility Graph dp
描述:有n个点,点上有值a[i], 任意两点(i, j)有无向边相连当且仅当 (a[i]moda[j])==0||(a[j]moda[i])==0(a[i] \mod a[j]) == 0\quad || \quad (a[j]\mod a[i]) == 0 问这幅图中的最大连通子图是多少。思路因为边是特殊要求的,所以一个连通子图的点是一成倍数关系的序列。 aa⋅m1a⋅m2a⋅m3…a⋅mk原创 2015-09-18 11:23:53 · 530 阅读 · 0 评论 -
codeforces #315B. Symmetric and Transitive dp
描述: 给定一个集合A,集合中有 n 个元素,定义 p(a, b) 为集合中的二元关系,p是等价关系,当且仅当p满足自反,对称,传递。而 Johnny 觉得并不需要自反性,因为if p(a,b), then p(b,a), thenp(a,b)if \space p(a, b), \space then \space p(b, a),\space then p(a, b)但是这个说法明显是错的原创 2015-09-18 10:41:30 · 441 阅读 · 0 评论 -
codeforces 525E. Anya and Cubes
题意有n个数字,先在里面选择若个,然后可以把其中最多k个数字变成其的阶乘,问你有多少中方法可以使和变成S。 (1 ≤ n ≤ 25,0 ≤ k ≤ n,1 ≤ S ≤ 1016,1≤ai≤109)(1 \le n \le 25, 0 \le k \le n, 1 \le S \le 10^{16}, 1 \le a_i \le 10^9)思路S非常大,S非常大,S非常大。重说三。所以要另想办法。原创 2015-09-30 20:03:09 · 534 阅读 · 0 评论 -
codeforces #317B. Minimization dp && greedy
描述:题目给出一个长为 n 序列A,你可以任意调整序列中数字的顺序。使得 ∑i=1n−k|A[i]−A[i+k]|\sum_{i=1}^{n-k}|A[i]-A[i+k]| 尽可能的小。(序列下标从1开始)输入:第一行输入n, k; (2≤n≤3⋅105,1≤k≤min(5000,n−1))(2\le n \le 3\cdot10^5, 1 \le k \le min(5000, n-1)原创 2015-09-13 17:29:30 · 458 阅读 · 2 评论 -
codeforces 580D. Kefa and Dishes dp
题意总共有nn种菜,需要吃mm盘。每盘的美味值为aia_i。并有k个规则,在吃完第xix_i盘后紧接着吃yiy_i盘菜可以多获得viv_i的美味值。问你能得到的最大美味值是多少。(1≤m≤n≤18,0≤k≤n∗(n−1))(1 \le m \le n \le 18, 0 \le k \le n*(n-1))思路n的数据范围比较小,可以用状压。S表示当前已经吃过的菜品的集合。题目中菜品吃的先后顺序是原创 2015-09-28 09:19:38 · 397 阅读 · 0 评论 -
uva 10817 状压dp
UVA 10817 - Headmaster's Headache学校要安排s个课程的教师,每个课程至少有两门老师任课,已知学校现有现有的n位老师的工资和任课情况,和m为前来应聘的老师的薪资和任课情况,求出安排全部课程的最少薪资花费。不得开除现有老师。状压dpdp[i][s] 表示前i位老师在课程安排为s的情况下的最小花费。s存放所有课程的安排情况。是个三进制数,每位的原创 2015-08-23 01:13:28 · 838 阅读 · 0 评论 -
hdu 4832
HDU 4832 Chessn*m的棋盘中起点为(x, y),每次可以移动到(x+1, y), (x-1, y), (x, y+1), (x, y-1), (x+2, y), (x-2, y), (x, y+2), (x, y-2) 八个位置。可以重复走。问移动k次有多少方案(%9999991)。两次移动被视为不同的方案当且仅当移动中至少存在一次移动方向不同。(1≤n, m, k≤1000; 1≤x原创 2015-09-11 12:11:30 · 1466 阅读 · 1 评论 -
uva 1291 dp
UVA 1291 - Dance Dance Revolution有一个跳舞机。原点为0,有四个方向,上左下右,分别标成(1234),初始玩家两只脚站在 0 位置,跳舞机会给出一串数字,玩家要按照顺序踩下四个方向的数字。移动脚会消耗玩家的能量,从0位置移动到四个方向消耗2点能量,从一个方向移动到另一个相邻的方向消耗3点能量,从一个方向移动到相反方向消耗4点能量,原点踩一下消耗1点能量。原创 2015-08-25 23:29:49 · 627 阅读 · 0 评论 -
zoj 3640 概率dp
Cain 被困在一个迷宫里面,迷宫有N个出口,Cain 每天可以随机选择一个出口,每个出口有一些怪兽,Cain 需要c[i]的武力值才能花 t[i] 天通过。否则 Cain 不能通过,并且他的武力值会增加c[i]。给出N条路的 c[i]、t[i] 还有 Cain 初始的武力值,求Cain 离开迷宫所需要的天数的期望。由题目可以发现,应抓住武力值的变化。dp[i] : 武力值在i原创 2015-07-29 15:08:50 · 462 阅读 · 0 评论 -
codeferces 149D Coloring Brackets 区间dp
http://codeforces.com/problemset/problem/149/D题目大致意思是给你一串字符串,只有小括号,并且已经符合括号匹配规则,现在要给这些括号涂色,给出一些涂色规则,求涂色的方案数。1: 括号要么不被涂色,要么被涂成蓝色,要么被涂成红色。2:两个相互匹配的括号有且仅有一个被涂色。3:相邻两个括号不可以有相同颜色。这里当然也是想到对区 [l,原创 2015-04-30 00:43:07 · 434 阅读 · 0 评论