![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
accosmos
这个作者很懒,什么都没留下…
展开
-
uva1618
题意:对于一个长度为n的序列,找到四个数,np,nq,ns,nr使得nq>nr>np>ns或nq<nr<np<ns。分析:枚举p,和q,剩下的就是找p和q区间的最值问题。RMP问题,有一个高效的算法是ST算法ST算法实际上就是动态规划,mp[i,j]表示从i开始长度为为2^j的区间(包含i)内的最值,那么将mp的区间分成mp[i,j-1],mp[i+...原创 2019-02-23 09:13:29 · 290 阅读 · 0 评论 -
对局匹配
小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起。如果两人分差小于或大于K,系统都不会将他们匹配。现在小明知道这个网站总共有N名用户,以及他们的积分分别是A1, A2, ... AN。小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场对局都匹配不起来...原创 2019-05-13 22:28:34 · 162 阅读 · 0 评论 -
uva10618
#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include<queue>#include...原创 2019-05-06 21:06:53 · 246 阅读 · 0 评论 -
uva1627
#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include<queue>#include...原创 2019-05-06 22:03:54 · 175 阅读 · 0 评论 -
uva10934
题意:给定k个气球,n楼层,输出最少需要多少次实验才能确定可以摔碎的楼层。第一种,d[i][j]用i个气球实验j次所能测试楼的最高层数,第一次决策,设测试楼层为k。如果气球破了,说明前k-1层必须能用i-1个球实验j-1次测出来,也就是说k=d[i-1][j-1]+1是最优如果气球没破,则相当于把第k+1层楼看作1楼以后的继续。因此在k层楼之上还可以测试d[i][j-1]层楼,即d[i...原创 2019-05-07 06:03:42 · 386 阅读 · 1 评论 -
uva1336
这题相当于二分法,就两个决策,向左向右,关于费用计算要注意,作者是每次都把所有点的总费用累积到状态值中。#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>...原创 2019-05-07 07:01:21 · 195 阅读 · 0 评论 -
uva1228
#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include<queue>#include...原创 2019-05-10 06:07:31 · 170 阅读 · 0 评论 -
uva1375 难题
#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include<queue>#include...原创 2019-05-10 07:09:25 · 255 阅读 · 0 评论 -
uva1628 最优路径问题
和修缮长城uva1336一起看#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include<q...原创 2019-05-10 07:59:29 · 234 阅读 · 0 评论 -
uva1204
#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include<queue>#include...原创 2019-05-08 06:28:04 · 270 阅读 · 0 评论 -
uva12099 Bookcase ACM NWERC
书上,作者分析很详细#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include<queue...原创 2019-05-08 07:21:00 · 174 阅读 · 0 评论 -
uva12170 Easy Climb ACM/NWERC
#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include<queue>#include...原创 2019-05-08 08:02:27 · 195 阅读 · 0 评论 -
uva10118
题意:给定4堆糖果,每堆有n颗,有一个最多可以装5个糖果的袋子,每次选择一堆糖果,把最顶上的一颗拿到袋子里,如果袋子里有两颗一样的糖果就拿走。问最多可拿几对。分析:枚举每次可以从4堆中任意一堆拿走。#include<iostream>#include<algorithm>#include<math.h>#include<string.h&g...原创 2019-05-28 23:48:35 · 308 阅读 · 0 评论 -
uva242
题目描述:假定一张信封最多贴5张邮票,如果只能贴1分和3分的邮票,可以组成面值1~13以及 15,但不能组成面值14。我们说:对于邮票组合{1,3}以及数量上限S=5,最大连续邮资为 13。输入S(S≤10)和若干邮票组合(邮票面值不超过100),选出最大连续邮资最大的一个 组合。如果有多个并列,邮票组合中邮票的张数应最多。如果还有并列,邮票从大到小排序 后字典序应最大。分析:完全背包,因...原创 2019-06-25 16:27:31 · 293 阅读 · 0 评论 -
uva1629
题目描述:有一个n行m列(1≤n,m≤20)的网格蛋糕上有一些樱桃。每次可以用一刀沿着网格线把 蛋糕切成两块,并且只能够直切不能拐弯。要求最后每一块蛋糕上恰好有一个樱桃,且切割 线总长度最小。分析:dp切割行和列#include<iostream>#include<algorithm>#include<math.h>#include<str...原创 2019-06-24 15:20:47 · 244 阅读 · 0 评论 -
uva1630
题目描述:给出一个由大写字母组成的长度为n(1≤n≤100)的串,“折叠”成一个尽量短的串。例 如,AAAAAAAAAABABABCCD折叠成9(A)3(AB)CCD。折叠是可以嵌套的,例 如,NEERCYESYESYESNEERCYESYESYES可以折叠成2(NEERC3(YES))。多解时可以输出 任意解。分析:枚举分割字符串位置,检查是否有字串再和原串长度比较。#include&...原创 2019-06-24 18:01:53 · 231 阅读 · 0 评论 -
uva1439
能将题目转化为图的色数问题就基本解决了#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include&...原创 2019-05-09 07:58:53 · 218 阅读 · 1 评论 -
uva10559
两种情况:1.找到相似方块直接消去 2.将中间方块枚举消去,两边方块可以累计平方更大。#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<...原创 2019-05-09 06:34:13 · 217 阅读 · 0 评论 -
uva1380
#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include<queue>#include...原创 2019-05-09 06:11:40 · 242 阅读 · 0 评论 -
动态规划三种方法
以数字三角形为例。求出一个数字三角形从上到下一条路径的结点总值最大1.递归计算int solve(int I,int j){return a[I][j]+(I==n?0:max(solve(I+1,j),solve(I+1,j+1)));}这种方法对于这题来说效率有点低了,因为重复计算了已经计算过的结点。从上到下。2.递推计算这个是从下到上int I,j;fo...原创 2019-03-01 22:34:40 · 554 阅读 · 0 评论 -
uva1025
题意:有n个车站,起点车站和终点车站都有k辆列车分别在不同时刻出发,问从起点走的人在指定时刻到终点,最少要等多长时间。分析:拿到题目,感觉很复杂,看了作者的分析,才明白怎么dp,看似不好dp,实际只要找到以时间为关键点,等待时间为dp对象就好做了,从t时刻终点开始,每次都有等1单位和乘向左或向右列车的方案。如果乘列车那么等待时间就不会变。#include<iostream>...原创 2019-03-12 19:54:14 · 231 阅读 · 0 评论 -
uva437The Tower of Babylon
题意:给定n个长方体,叠加长方体,规则是上面的长方体长和宽都要小于下面的长方体。每种长方体有无数个,问叠加最高为多少。分析:dp,递归搜索最大高度。‘#include<iostream>#include<string.h>#include<sstream>#include<set>#include<algorithm>...原创 2019-03-12 22:29:51 · 156 阅读 · 0 评论 -
uva1347Tour
题意:给定n个点,将所有点用一条线连起来,使得线最短。分析:用d[i][j]代表走过了1~max(i,j)之间的点。dist表示两点间的距离。作者的代码可谓神仙代码,细看才发现逻辑的奥妙。#include<iostream>#include<string.h>#include<sstream>#include<set>#incl...原创 2019-03-12 23:23:45 · 95 阅读 · 0 评论 -
背包问题
1.有n种物品,每种物品无穷多,第i种物品的体积为Vi,重量为Wi。选一些物品装到一个容量为C的背包中,使得背包内物品在总体积不超过C的前提下重量尽量大。1<=n<=100,1<=Vi<=C<=10000,1<=Wi<=10^6。和翻硬币问题差不多,加上个权值就行#include<iostream>#include<algor...原创 2019-04-01 08:27:47 · 262 阅读 · 0 评论 -
uva11584
题意:划分回文串,求出一个字符串的最小回文串个数。#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>using namespace std;int ...原创 2019-04-22 06:44:28 · 502 阅读 · 0 评论 -
最优矩阵链乘
poj1651状态转移方程:f(i, j) = min { f(i, k) + f(k+1, j) + P(i-1)P(k)P(j) }, i <= k < j#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#includ...原创 2019-04-22 23:26:50 · 120 阅读 · 0 评论 -
uva10003
#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>using namespace std;const int maxn = 1000 + 10;cons...原创 2019-04-23 06:19:49 · 163 阅读 · 0 评论 -
uva1626
#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>using namespace std;const int maxn = 1000 + 10;cons...原创 2019-04-23 07:24:37 · 240 阅读 · 1 评论 -
TSP问题
for (int s = 1; s < 1 << (n - 1); s++) { for (int i = 0; i < n; i++) { d[i][s] = INF; if(s&(1<<i))continue; for (int j = 1; j < n; j++) { if (s&(1 <<...原创 2019-05-03 10:04:24 · 905 阅读 · 0 评论 -
图的色数
#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include<queue>#include...原创 2019-05-03 10:25:24 · 1204 阅读 · 0 评论 -
uva1331Minimax Triangulation
#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<vector>#include<queue>#include<algorithm>using namespace std;con...原创 2019-04-24 05:49:45 · 156 阅读 · 0 评论 -
树上的动态规划
1.树的最大独立集对于一颗n结点的无根树,选出尽量多的结点,使得任何两个结点均不相邻,然后输入n-1条无向边,输出一个最大独立集。#include <iostream>#include <vector>#include <cstdio>#include <cstring>using namespace std;#define ...原创 2019-04-24 07:31:15 · 518 阅读 · 0 评论 -
uva10817
题意:有m个教师,n个求职者,需讲授s个课程,已知工资c和能教的课程集合,要求支付最少使每门课至少有两名教师,在职教师不能辞退。分析:枚举,两种情况,选和不选求职者。#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<s...原创 2019-05-06 06:30:38 · 491 阅读 · 0 评论 -
uva1252
#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include<queue>#include...原创 2019-05-06 07:10:14 · 380 阅读 · 0 评论 -
uva1631
题意:有一个n(n≤1000)位密码锁,每位都是0~9,可以循环旋转。每次可以让1~3个相邻 数字同时往上或者往下转一格。例如,567890->567901(最后3位向上转)。输入初始状态 和终止状态(长度不超过1000),问最少要转几次。例如,111111到222222至少转2次,由 896521到183995则要转12次。分析:分成两种情况向上转和向下转,题目说可以同时转1~3,所以...原创 2019-07-13 09:23:24 · 346 阅读 · 0 评论