动态规划-记忆化搜索/递推
LYoGa
这个作者很懒,什么都没留下…
展开
-
UVA10651- Pebble Solitaire(位运算+记忆化搜索)
题意:有12个洞,里面可以放钻石,也可以不放。当--原创 2014-07-16 10:45:23 · 541 阅读 · 0 评论 -
UVA662- Fast Food
题意:在一条公路上,有n个酒店,要建造k个供给站(建造在酒店所在的位置),给出酒店的位置,求怎么样建造供给站才能使得每个酒店都能得到服务且所要走的路程最短。思路:在i到j酒店建立一个供给站,要使得路程和最短,要将供给站建立在中间。如果i到j为偶数时,可以建立在中间两个数其中一个地方,如果是奇数时,应该建立在(i + j) / 2的地方。我们可以预处理从i到j酒店的最短路程和dis[i]原创 2014-07-25 19:22:01 · 931 阅读 · 0 评论 -
UVA10599 - Robots(II)(变形的LIS)
题意:一个机器人在n * m的网格里面捡垃圾,机器人只能向右或向下走,求出能捡到的垃圾数量的最大值,有多少条路径可以达到最大值,以及输出其中一条路径。思路:按照题意可以看出,因为机器人只能向右和向下走,所以纵坐标就不重要的,而横坐标是递增的。当将所有拥有垃圾的格子经过计算得到它的一维值(唯一的),得到一组的数组。那就可以转化为求最长上升子序列。但这个LIS的条件是mod(m)要大于前一原创 2014-07-26 15:21:42 · 797 阅读 · 0 评论 -
UVA825- Walking on the Safe Side
题意:一个人从park走到station要经过一个已经划分成相等大小模块的广场。有些模块s原创 2014-07-07 21:02:25 · 461 阅读 · 0 评论 -
UVA674- Coin Change
题意:用所给的硬币面值构成所需的面值思路:因为所用硬币数量不限,所以很容易想到完全背包。递推:#include #include #include #include using namespace std;const int MAXN = 10005;int n;int coin[] = {1, 5, 10, 25, 50};long long d原创 2014-07-28 16:37:21 · 744 阅读 · 0 评论 -
UVA10313- Pay the Price
题意:有关用硬币凑成所需面值的组合数。1、只有N,表示使用个数从1 - N的硬币凑成面值为N的组合数2、N,L1,表示使用个数从1 - L1的硬币凑成面值为N的组合数3、N,L1,L2,表示用个数从L1 - L2的硬币凑成面值为N的组合数思路:这题用到了Ferrers图像的性质,即将整数N拆分成不超过n个数之和的拆分数的方案数与将整数N拆分成若干数但都不大于n的方案数是相同原创 2014-07-28 15:57:49 · 824 阅读 · 0 评论 -
UVA10558- A Brief Gerrymander
题意:一个棋盘,横竖线都是从1到100标号(竖线从左到右标,横线从下到上标),输入n表示有n个被标记的格子,是给出这个格子的左下角坐标,然后输入m,在输入m个数,表示在这些竖线的地方切开棋盘(其实只切了m-2刀,因为2刀必须是1和100,相当于没有),然后输入A,表示你要在横上上切A刀(其实也只是A-2刀,因为2刀必须在横线的1和100)。那么就可以把棋盘很多个大小不一的方块(矩形),只要这些方块原创 2014-07-27 16:44:49 · 652 阅读 · 0 评论 -
NOJ1581
题意:给出n只筷子,选出k+3双筷子,使得每对筷子的平方差的原创 2014-07-29 10:34:00 · 749 阅读 · 0 评论 -
UVA10271- Chopsticks
题意:给出n只筷子,要从中tiao x原创 2014-07-29 18:33:49 · 691 阅读 · 0 评论 -
HDU4968-Improving the GPA
题目链接题意:每个成绩范围对应一个绩点,给出平均分avg,课程数n,求能得到的平均绩点的最大值和最小值。思路:先预处理出每个成绩所对应的绩点,然后递推出所有情况,d[i][k]表示i个人有k分的绩点总数,所以可以得到动态转移方程。 当求最大值时d[i][k] = max(d[i][k], d[i - 1][k - j] + gpa[j])(j表示课程分数) 当求原创 2014-08-19 21:13:34 · 803 阅读 · 0 评论 -
UVA10312- Expression Bracketing(Catalan + 递推)
题目链接题意:给出一个序列,长度为n,表示有n个x(节点),可以添加任意括号,问说形成的串为非二叉表达式的有多少个。思路:用总数减去二叉表达式的数量。二叉表达式可以用Catalan数求解,至于总数的话,用dp求解。dp[i][0]表示在第i个位置可以被拆分成两个子树,dp[i][1]表示有一个子树。代码:#include #include #includ原创 2014-09-18 10:59:51 · 944 阅读 · 0 评论 -
UVA580-Critical Mass
题目链接题意:一个栈中只能放入U和L,问存在连续3个以上U(危险组合)的个数为几个思路:用从的组合数-安全组合=危险组合。d[i]表示第i个位置以L结束的序列,所以就有d[i] = d[i - 1] + d[i - 2] + d[i - 3]。代码:#include #include #include #include #include usin原创 2014-09-18 08:53:55 · 1934 阅读 · 1 评论 -
HDU5001-Walk(记忆化搜索)
题目链接题意:一张无向图,要你求出走d步之后,每个点无法到达的概率。思路:记忆化搜索,枚举每个点a,dp[i][j]表示走了i步到达j点的概率(不包括a点),注意初始化清空。代码:#include #include #include #include #include using namespace std;const int MAXN =原创 2014-09-15 15:33:37 · 1073 阅读 · 0 评论 -
1362 - Exploring Pyramids
#include #include #include #include using namespace std;typedef long long ll;const int MOD = 1000000000;const int MAXN = 305;char s[MAXN];ll d[MAXN][MAXN];ll dp(int i, int j) { if (原创 2014-09-15 20:26:02 · 830 阅读 · 0 评论 -
UVA10081-Tight Words(递推)
题目链接题意:给出一个0到k的序列,要求出有每相邻的两个数之间的差不差过1的子序列的概率。思路:递推,dp[i][j]表示长度为i并且j结尾的子序列的个数。注意,如果用符合子序列个数除以从个数,数组要用double,用long long的话会爆掉。代码:#include #include #include #include #include us原创 2014-09-17 13:31:11 · 846 阅读 · 0 评论 -
UVA10404- Bachet's Game
题意:玩取石子游戏,最后一个取原创 2014-07-08 09:23:21 · 571 阅读 · 0 评论 -
UVA147- Dollars
题意:给你一定面值的钱数,一定数量的硬币的面值,求原创 2014-07-06 21:26:08 · 498 阅读 · 0 评论 -
UVA590- Always on the run
题意:给定两个数n,k,n个城市,k次航班,然后给出n*(n-1)条航班记录,前(n-1)行代表第一个城市分别到其他城市的航班,如果消费为0,则代表没有航班,例如第一个样例,前两行表第一个城市到第二个城市和打三个城市的所有航班,接下来的(n-1)行,代表第二个城市到第一个城市和第三个城市的,现在要求出从第一个城市出发,经过k次航班,到达第n个城市所需要的最小花费是多少?原创 2014-07-16 10:56:48 · 587 阅读 · 0 评论 -
UVA10739 - String to Palindrome
题意:给你一串字符串,使用最少的操作数,使该字符串转变ch原创 2014-07-16 15:41:44 · 502 阅读 · 0 评论 -
UVA10617- Again Palindrome
题意:给你一串字符串,找出原创 2014-07-16 19:49:11 · 484 阅读 · 0 评论 -
UVA11151 - Longest Palindrome
题意:找出字符串中最长的回文字符串思路:跟qia m原创 2014-07-17 15:36:09 · 498 阅读 · 0 评论 -
UVA10453- Make Palindrome
题意:添加最少的字母,使得所给的字符串变为回文字符串思路:原创 2014-07-17 20:04:33 · 807 阅读 · 0 评论 -
UVA10564- Paths through the Hourglass
题意:给你一个沙漏的数组,要求自顶向下原创 2014-07-18 21:14:58 · 471 阅读 · 0 评论 -
UVA10201 - Adventures in Moving - Part IV
题意:原创 2014-07-18 21:29:23 · 533 阅读 · 0 评论 -
UVA10891- Game of Sum
题意:原创 2014-07-19 20:50:36 · 1226 阅读 · 0 评论 -
UVA10304- Optimal Binary Search Tree(最优排序二叉树OBST)
题意:给n的数字建立一棵排序二叉树,要求原创 2014-07-21 09:54:26 · 1538 阅读 · 0 评论 -
UVA11258- String Partition
题意:每组数据由一串不超过200个字符的字符串构成,问把它们分成不超过int类型的数,组合起来最大是多少?原创 2014-07-20 14:50:54 · 663 阅读 · 0 评论 -
UVA10401 - Injured Queen Problem
题意:给你一个棋盘,棋盘的规格为n*n(n为字符串的长度),要求原创 2014-07-21 20:17:34 · 674 阅读 · 0 评论 -
UVA10732 - Cyborg Genes
题意:给出两串字符串,要你找出最小花费s原创 2014-07-23 10:42:21 · 703 阅读 · 0 评论 -
UVA10911- Forming Quiz Teams
题意:给你n * 2 个点,要求将这些点liang lian原创 2014-07-22 11:22:16 · 581 阅读 · 0 评论 -
UVA10913 - Walking on a Grid
题意:一个N * N的网格,每个格子里面有数值,求从(1, 1)到(N)原创 2014-07-23 22:25:30 · 570 阅读 · 0 评论 -
HDU5045-Contest(DP+状态压缩)
题目链接题意:有n个人做m道题目,每个人对于每题都有答对的概率,求最后答出所有题目概率的最大值。有要求就是每两个人之间答题的数目不能超过1。思路:DP+状态压缩。dp[i][j]表示前i道题目j个人答题状态的最大值,j用二进制表示,因为人最多就10个。因为每两个人之间答题数目不能超过1,所以当状态达到1 代码:#include #include #inc原创 2014-09-28 08:35:47 · 1116 阅读 · 2 评论