自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 uvalive4613

题目大意: 给出n辆车的行走方向,到达时间和通过某段路的时间。 有一个单行道,只能让一辆车经过,为了保证安全两辆车之间经过同一个点的时间差要>=10 问所有的车经过这段路的最少时间。思路: dp[i][j][k]代表的是方向向左的经过i辆方向向右的经过j辆最后一辆车的方向为k的时候的经过这段路所需要使用的最少时间。 那么假设前一辆车发车的时间为s,到达终点的时间为t那么当前的车的发车是时间就

2016-04-27 15:43:16 366

原创 uvalive4625(dp + 二分)

题目大意: 给你一串 n 个数,表示n个球,给你这n个球的重量,要你把这n个数分成 m - 1 段,每段的数字个数都是偶数,对于每一段,它的半段数字个数都不超过d,找出一种分发,使所有的这些半段的重量的最小值,并输出这个最小值。思路: 详细见代码解释 代码:#include <iostream>using namespace std;#include <cstring>#include

2016-04-27 15:07:49 533 1

原创 uvalive4987

题目大意: 有n支施工队在修一条笔直的高速公路,其中第i支队伍离告诉公路起点的距离是ai,另外还有m个避难所,其中第i个避难所离高速公路的起点的距离是bi,给每只施工队分配一个避难所,距离是|ai,-bi|,求使得所有施工队移动距离的总距离最小,每个避难所最起码有一个施工队,打印每个施工队伍的避难所号思路: dp[i][j]表示前i只队伍到前j个避难所(前j个避难所每个都有施工队)所需要移动的最

2016-04-27 11:38:14 384

原创 uvalive4490(状态压缩 + dp)

题目大意: 从左到右给出n本数的高度和最多可以抽取的书本的数量k,如果书本与相邻的书本的高度不相同的话就是一个段,段越多混乱度就越高。求最低的混乱度。思路: dp[i][j][s][end]表示前i本书操作了j次,剩下的书的状态为s,最后一本书是end的最低的混乱度。 那么对于一本书有两种情况: 1. 跟其前面的书籍的高度是一样的 那么dp[i][j][s][end] = min(dp[i

2016-04-26 22:21:23 491

原创 uvalive4015

题目大意: 一棵n个节点的有根树,树的边有正整数权,表示两个节点之间的距离,你的任务是回答这样的询问,从根节点出发,走不超过x单位的距离,最多能走多少个节点,节点经过多次算一个,对于每次的询问输出:经过节点数最大的值思路: 树形DP。 树形DP一般都是用三维结构完成的。 dp[i][j][k]表示根节点为i经过了j个节点,类似于01背包,k== 0表示返回,k == 1表示不返回。 所以如

2016-04-26 11:38:51 301

原创 uvalive4945(dp,贪心)

转自别人http://blog.csdn.net/shuangde800/article/details/10019951 题目大意: Petra和Jan分n个糖果,每个人轮流拿,一次只能拿一个,抽签决定谁先开始拿 每个糖果有两个值x,y, 如果Petra拿了会获得值x, Jan拿了会获得值y Petra每次都选择对自己价值最大的(x最大)拿,如果有多个x相同大,选择y值最小的 Jan选择

2016-04-21 19:49:36 635

原创 uvalive4394(区间dp)

题目大意: 给出两个字符串;每次可以选择第一个字符串的一个区间,全部刷成某一个字母; 问最少刷几次可以刷成第二个串;思路: dp[i][j]是区间(i,j)最少需要刷多少此。 如果a[i] == a[k] 那么dp[i][j] = min(dp[i][j],dp[i + 1][k] + dp[k + 1][j]) 因为i 和k相等的话,那么k就不需要在刷了,所以分成这两个区间算的话会是最

2016-04-21 18:46:42 418

原创 uva10564

题目大意: 给一个如题目上给的图。要求从第一层走到最下面一层,只能往左下或右下走,经过的数字之和为sum。 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径。思路: dp[i][j][k]表示从坐标(i,j)走到最后一层的和要为k的方案数。 由于它只能往左下或者右下走,所以dp[i][j][k] = dp[i + 1][j][k - val] + dp[i + 1][j +

2016-04-21 18:41:30 462

原创 uvalive3363

题目大意: 压缩字符串。 例如 letsgogogo = lets3(go) letsgogogo的长度是10 lets3(go)的长度是9 3(go)的长度计算:每个字符算1的长度 所以这是5思路: 字符号DP。 区间DP。 dp[i][j]表示在从i到j可以达到的最短的产地故代码:#include <iostream>using namespace std;#include

2016-04-20 17:57:09 247

原创 uvalive2038(树形DP基础题)

题目大意: 给定一棵树,要求选择尽量少的点,使得没有被选择的点都可以至少和一个已经选择的点相邻。思路: 树形DP。 类似于01背包问题。 树上的结点要么选要么不选。 dp[i][0]表示第i个结点不选 那么dp[i][0] += dp[j][1] 其中j是i的子树的根节点。 dp[i][1]表示第i个结点要选 那么dp[i][1] += min(dp[j][1],dp[j][0])发

2016-04-20 17:35:18 354

原创 uva10564

题目大意: 给一个如题目上给的图。要求从第一层走到最下面一层,只能往左下或右下走,经过的数字之和为sum。 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径。思路: dp[i][j][k]表示从坐标(i,j)走到最后一层的和要为k的方案数。 由于它只能往左下或者右下走,所以dp[i][j][k] = dp[i + 1][j][k - val] + dp[i + 1][j +

2016-04-19 20:59:12 283

原创 uva11795

题目大意: 给出有几个怪兽以及初始的可以打的怪兽的二进制序列。为1的就是可以打的为0的就是不可以打的。 打死一只怪兽后你就可以用它的武器去打特定的怪兽。 问最多有几种方案。思路: 状态压缩DP。 S[i]表示的是当死的怪兽的状态为i的时候所获得的武器可以打死哪些怪兽。 weapon[i]表示当打死怪兽i的时候所可以获得的武器。 dp[i]表示当死的怪兽的状态为i的时候最多可以有几种方案

2016-04-19 20:10:33 627

原创 uvalive4727

题目大意: 给出n,k,n表示的是数字的个数,数字都是从1开始的。 k表示的是每隔几个挑选出一个数字。 输出最后的三个数字。思路: 约瑟夫环问题。 类似于uvalive3882代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>int dp[500005];int main()

2016-04-19 20:05:44 364

原创 uvalive4731

题目大意: 给出数字的个数n以及要分成的组数w。 然后给出各个数字的概率, 求最小的数学期望。思路: DP。因为要求最小的数学期望所以概率大的应该摆在前面,所以要先排序一下。 dp[i][j]表示的是第i组前j个数字可以得到的最小的数学期望。代码:#include <iostream>using namespace std;#include <cstring>#include <st

2016-04-18 16:41:58 433

原创 uva11404

题目大意: 给出一个字符串,求出最长的回文串,如果有多种答案的话,按字典序最小输出。思路: 刚开始没有看清楚就直接正序逆序求最长公共子序列,结果发现是错的。 后来参考了别人的代码发现,求出最长公共子序列的思路是正确的,但是呢,可能出现特例 例如: kfclbckibbibjccbej jebccjbibbikcblcfkbcibbibc是他们的最长公共子序列,但是这并不是一个回文串,但是

2016-04-18 15:51:33 774 1

原创 uva11552

题目大意: 给出一个数字k和一串字符,k个字母为一个子串,连续的相同的字母组成一个chunks,求字符串中最少的chunks个数。思路: DP。 dp[i][j]表示的第i个子串中第j个字母作为最后一个字母最少可以有多少个chunks. 当第i-1个字串中出现了与第i个字串中相同的字母并且第i个字串只有一个chunks或者第i个子串的最后一个字母跟第i-1个字串的最后一个字母不相等的话,那么

2016-04-18 15:14:08 566

原创 uva10534(最长递增子序列的算法变形 复杂度较低)

题目大意: 给出一串数字,求出这串数字中前n + 1个数字是递增的,后n + 1个数字是递减的,问这样的数字串最长是多少。思路: 类似于uva10524 不能用最长递增子序列的算法 因为最大是10000 双重for会TLE代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#incl

2016-04-18 13:56:37 318

原创 uvalive4256

题目大意: 给出一个无向联通图和一串数字,然后要你修改这串数字,使得数字在无向联通图中是连通的或者它们是相等的。思路: DP。 dp[i][j]表示的是从1到第i个数字以j结尾需要修改多少个数字。 dp[i][j] = min(dp[i][j],dp[i - 1][k] + (j == x?0:1)) 其中x表示的是给出的序列中第i个位置的数字是多少。 这个状态转移方程的前提是j跟k必须是

2016-04-16 17:02:37 326

原创 uvalive5848

题目大意: 给出m个坐标和n个坐标,n个坐标的横坐标都比m个坐标的横坐标要来的小。求出从m个坐标中选出一个坐标,要使得它到n个坐标中的其中一个坐标的汉明距离达到最小。思路: 汉明距离:abs(x1 - x2) + abs(y1 - y2) 由于任意的x1 < x2,所以变成x1 - x2 + abs(y1 - y2) 下面分情况进行讨论: y1 >= y2的情况,x1 - x2 + y1

2016-04-16 16:32:32 215

原创 uva11584

题目大意: 给出一个字符串,问最少可以分成几个回文串思路: 直接枚举出左边界和右边界然后判断两个边界之间是否可以有回文串,然后DP选择出一个较小的。详细见代码。 代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>char s[1010];int f[1010];bool check

2016-04-16 16:26:37 723

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除