自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蚂蚁大战大象

https://github.com/zxjcarrot/

  • 博客(30)
  • 收藏
  • 关注

原创 UVA 1291 Dance Dance Revolution(DP)

题意:一个跳舞机上有5个点,分别为central, top, bottom, left, right点,一只脚原地踏步需要1点体力,一只脚从central点上移到其他点上需要2点体力,从一个点上移动到相邻的点上需要3点体力,从一个点移动到对面的点上需要4点体力,初始的时候双脚都在central点上,给出一系列的舞步,求最少需要多少的体力来完成.思路:设dp[k][i][j]为在第k个舞步的时候

2014-04-25 20:11:44 732

原创 UVA 1351 String Compression(区间DP)

题意:给出一个字符串S,要求把字符串长度压缩的尽量短,如果有N个连续的字符串s相同,那么就可以把这多个字符串压缩成N(s),这样压缩后的长度为 N的位数+2(两个括号)+s的长度, 同样压缩后的N(s)还可以继续被压缩,求最短的字符串长度.思路:首先找出各个区间的最短周期串长度(即这个区间一个串循环多次组成),定义一个cycle[i][j]表示[i,j]区间的最短周期串长度.然后进行动态规

2014-04-25 16:30:21 722

原创 POJ 2948 Martian Mining(DP)

题意:(摘自刘汝佳的训练指南)给出n*m网格中每个格子的A矿和B矿的数量,A矿必须由右向左运输,B矿必须由下向上运输,管子不能拐弯或间断(即往上和往左的路线不能有交集)。要求使收集到的A,B矿总量尽量大。思路:考虑到管子不能转弯和间断,可以设dp[i][j]为以i,j为左下角的最大矿总量.开两个辅助数组A[i][j]为在i,j位置的时候建A管子的时候从i,j到i, 1的总和, B[i][j

2014-04-21 09:44:31 923

原创 UVA 11795 Mega Man's Mission(状态压缩DP)

题意:需要打败N个敌人,初始给出了一个武器,武器能打败一些敌人,打败一个敌人之后就能得到敌人的武器,其武器又可以大

2014-04-20 12:56:06 732

原创 UVA 1456 Cellular Network(贪心,DP)

题意:(摘自LRJ《训练指南》)手机在蜂窝网络中的定位是一个基本问题。假设蜂窝网络已经得知手机处于c1, c2,…,cn这些区域中的一个,最简单的方法是同时在这些区域中寻找手机。但这样做很浪费带宽。由于蜂窝网络中可以得知手机在这不同区域中的概率,因此一个折中的方法就是把这些区域分成w组,然后依次访问。比如,已知手机可能位于5个区域中,概率分别为0.3、0.05、0.1、0.3和0.25

2014-04-18 16:37:30 728

原创 UVA 11552 Fewest Flops(DP)

题意:输入一个正整数k和字符串S,字符串的长度保证为k的倍数。把S的字符按照从左到右的顺序每k个分成一组,每组之间可以任意排序,但组与组之间的先后顺序应保持不变。你的任务是让重排后的字符串包含尽量少的“块”,其中每个块为连续的相同字母比如,uuvuwwuv可以分成俩组:uuvu和wwuv,第一组可重排为uuuv,第二组可重排为vuww,连起来是uuuvvuww,包含4个块。思路:这

2014-04-18 10:49:38 873

原创 UVA 20002 Partitioning by Palindromes(简单DP)

题意:给出一个字符串,求能最少划分成几个连续子串,使得每个子串都是回文串.思路:设dp[i]为前i个字符划分的最优解,那么dp[i] = min(dp[i], dp[j] + 1)这里满足满足j + 1..i为一个回文串.可以用一个二维数组预处理求出x...y的串是否为回文串来做.#include #include #include using namespace std;

2014-04-17 17:16:43 604

原创 ZOJ 2846 Traverl(DP)

直接枚举每个城市作为起点,然后模拟是否能回到这个起点就可以了.

2014-04-09 20:51:54 743

原创 ZOJ 2771 Get Out of the Glass(DP)

题意:有一道光射入3层玻璃,光可以在任何两层玻璃之间反弹,求反弹N次有多少种不同的路径.思路:一块玻璃有正反面之分,如果光射在(或者反弹到)第i层的正面,那么只能是从第1至第i-1层的反面反射到第i面的正面上,同样第i层的反面只能是从第i+1到最后一层的正面上反射到第i层的反面上.设dp[i][j][2]表示第i次反射在第j层的正反面的路径数,那么答案就是sum(dp[n][i][0] +

2014-04-08 22:24:02 1286

原创 ZOJ 3769 Diablo III(DP)

题意:给出13类装备,每种装备都有攻击力和防御值,每种装备只允许选择一个,求满足防御值至少在M的情况下,攻击力最大为多少.有几个条件:13种装备里如果选择了双手装备,就不能选择武器和护盾了,还有戒指可以双手各带一个.思路:首先不考虑条件,设dp[i][j]为前i种装备,防御值达到j的时候的最大攻击力.那么可以有dp[i][j + t] = max(dp[i][j + t], dp[i

2014-04-08 21:00:52 1301

原创 ZOJ 1953 Advanced Fruits(LCS)

题意:给出两个字符串,求能满足子串(可以不连续)中包含给出的两个字符串的最短字符串.思路:本质上就是LCS问题,做法是先找出两个串的LCS,并记录其位置设dp[i][j]为A串以第i个字符结尾B串以第j个字符结尾的LCS, 用path数组来记录路径,如果A[i] == B[j] 那么dp[i][j] = dp[i - 1][j - 1].否则 dp[i][j] = max(dp[i

2014-04-07 21:41:28 830

原创 Codeforces 389A Fox and Number Game(贪心)

题意:给出一个序列X,能进行如下操作,选择两个下i, j(i != j), 将Xi的值减去Xj, 求怎么样操作能使的最后序列和最小.思路:做法是每次都找序列里最大的和次大的,最大的减掉次大的,如果都变成了相同的大小,就退出循环.#include #include #include using namespace std;const int MAX = 101;int X[MAX

2014-04-07 11:37:21 1010

原创 Codeforces 414b Mashmokh and ACM(简单DP)

题意:一个序列B1,B2...Bl如果是好的,必须满足Bi | Bi + 1(a | b 代表a整除b), 求长度为K,元素大小小于N的序列个数.思路:看到数据的规模和取模1000000007就知道应该是数位DP了,设dp[i][j]表示以i做结尾长度为j的序列个数.那么答案就是sum(dp[i][K] | 1dp[i][j] = sum(dp[p][j - 1] | p满足p能整除i

2014-04-07 11:12:02 1392

原创 Codeforces 388A Fox and Box Accumulation(贪心)

题意:给出n个箱子,每个箱子都有一个力量值Vi,代表能支撑Vi个箱子,求能把这些箱子摆成的最少的堆数.思路:刚开始想着从大到小排序来做,从第i个箱子开始能放上去的就放上去,题目的最后一个数据很好的否定了这种做法.应该从小到大排序,记录当前堆的个数,能否把当前堆放到下一个箱子上,不能放就作为一堆.#include #include #include using namespace

2014-04-07 10:46:41 912

原创 Codeforces 385C Bear and Prime Numbers(素数打表,二分)

题意:给出n个数,m次查询,每次查询一个区间[l,r],求n个数中是区间[l,r]之间素数倍数的个数和,每个素数都要算一次和.解法:由于Xi最大为10^7,所以可以开一个这么大的数组,用筛选法求出素数和对应的和,最后查询的时候二分找素数位置.#include #include #include using namespace std;const int MAX = 10000001

2014-04-07 10:24:28 1452

原创 九度OJ 1537 买卖股票(DP)

题意:给出N天的股价,能买入和卖出股票,但是任何时候手上最多持有一份股票.允许交易K次求最多的收益.思路:设dp[i][j]为前i天交易j次的最大收益.那么dp[i][j] = max(dp[k][j - 1] - a[k + 1] + a[i], dp[i - 1][j]) 0这样的复杂度为O(KN^2),注意到在求dp[i][j]的时候dp[k][j - 1]都已经计算好了,所以可

2014-04-06 22:38:09 1375

原创 Codeforces 392B Tower of Hanoi(DP)

题意:在原来的汉诺塔基础上,给每次移动加上一个权值,Tij表示从rodi移动到rodj的花费.求把n个盘子从rod1移动到rod3上的最少花费.设dp[n][i][j]为将n个盘子从rodi移动到rodj上的最少花费.决策有两个.1.将rod1上的n-1个盘子移动到rod2上,将rod1上的最后一个移动到rod3上,再将rod2上的n-1个盘子移动到rod3上.2.将rod1上

2014-04-06 20:59:05 986

原创 ZOJ 2852 Deck of Cards(DP)

题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1852题意太繁琐就不讲了.设dp[q][i][j][k]表示前i张牌,每个卡槽的分值各为i,j,k时候的最能的多金钱数.dp[0][0][0][0]=0,其他设为-1.具体的转移方程看程序吧.#include #include #include

2014-04-06 19:34:24 1502

原创 ZOJ 2972 Hurdles of 110m(DP)

题意:刘翔跨栏问题,初始有M能量,有N块区域需要跑,在第i可以使用3种模式:1.Fast模式 通过第i个区域需要用T1[i]的时间,需要消耗F1[i]能量.2.Normal模式 通过第i个区域需要用T2[i]的时间,不需要消耗能量.3.Slow模式 通过第i个屈戌需要T3[i]的时间,能增加F2[i]能量,但是增加后的能量不能超过总能量M.求通过N个区域的最短时间.还是比较简单

2014-04-06 16:46:26 780

原创 POJ 1093 Formatting Text(DP)

题意:给出一段文章,要求将里面的单词按照n个字符一行来分,不够一行的可以在单词间插入空格来得到,一行有一个basness值,为一个每个gap之间的空格数-1的平方,求badness总和最少的分隔方式.经典DP,设dp[i]为从第i开始到第n单词的最少badness和分隔方式,那么dp[i] = min(dp[j + 1] + badness(i, j)).badness函数计算第i个单词到第j

2014-04-05 18:35:23 949

原创 ZOJ 1103 Hike on a Graph(BFS)

题意:给出一个完全图,任意两点间都有边,每条边都有一个颜色,在某3个点上放了3个棋子,每次只允许让一个棋子通过一条边走到另一个点上并且走的这条边的颜色必须和另外两个棋子之间的边颜色相同(完全图,任意两点都有边),求走到同一个点上最少需要多少步.思路:可以设计一个3维的状态,dis[x][y][z]代表3个点分别在x, y, z点上时候的最少步数,那么就可以用类似spfa的松弛方法来更新就可以了

2014-04-05 11:50:00 799

原创 ZOJ 1428 Magazine Delivery(DP)

题意:有一堆杂志要送到N个地点,有3两出租车可以用,每辆杂志可以载无限多的杂志,初始3两车都在1地点,两地点距离由D[i][j]给出,第i个地点只有第i- 1个地点送了杂志之后才能送,求使用3两车送完杂志的最少距离.思路:题目中的条件:第i个地点只有第i- 1个地点送了杂志之后才能送 给出了很好的一个阶段划分.设dp[i][j][k][m]为送第i个地点的时候3两车分别在j,k,m位置

2014-04-03 20:57:15 622

原创 ZOJ 3321 Circle

题意:给出一个图的N个点,M条边,判断这个图是否是一个环,图里没有自环,重边.思路:给出的N和M都很小,首先题目里已经给出定义,如果N都满足的条件下,用类似欧拉回路的方法删边去dfs就可以了.#include #include using namespace std;const int MAX = 21;int n, m;int end;bool g[MAX][MAX];

2014-04-03 20:47:57 556

原创 ZOJ 3569 Dr. Zomboss's Revenge(贪心)

刚开始看错了题目,看成了超出忍耐值只用加一次ai就可以了,最后看题解发现是每个超出的植物都要加一个ai.贪心思路就是每行都放bi个,如果有剩余的

2014-04-03 20:40:47 696

原创 ZOJ 2656 Travel Around Country(模拟,枚举)

直接枚举每个城市作为起点,然后模拟是否能回到这个起点就可以了.#include using namespace std;const int MAX = 10001;int O[MAX], D[MAX];int N;int main(int argc, char const *argv[]){ while(scanf("%d", &N) == 1){ for(int i =

2014-04-03 20:38:18 533

原创 ZOJ 1602 Multiplication Puzzle(矩阵连乘)

题意:给出一排卡,每次能拿走除了第一张和最后一张之外的任何卡,拿走卡i之后要加上卡i和卡i-1和卡i+1的乘积,直到剩下第一张和最后一张为止,求最少的乘积和.设dp[i][j]为拿走i..j之间卡的最少乘积和,那么答案就是dp[1][N]dp[i][j] = min{dp[i][k[ + dp[k][j] + C[i] * C[k] * C[j]] | ibase cases: dp[

2014-04-02 20:40:02 735

原创 ZOJ 1642 Match for Bonus(LCS)

题意:给出每个字符的权值,求两个字符串的子序列能够获得的最多权值.解法:就是LCS问题,只不过长度变成了权值.题目里没给出字符长度WA好几次,2300左右就差不多了.#include #include #include using namespace std;const int MAX = 2200;int dp[MAX][MAX];int bonus[256];cha

2014-04-02 17:58:44 461

原创 ZOJ 1163 The Staircases(01背包)

题意:求N块砖头能搭成多少种不同的楼梯,要求楼梯每一阶所组成的砖头数都不一样.思路:相当于求用i个数组成N能有多少种方法.dp[i][j]为前i个数组成j的方案数.dp[i][j] = sum(dp[i - 1][j - i]).意思是前i - 1个数组成j - i的方案数.可以用滚动数组优化,本质上其实就是一个01背包,容量为j,重量为i注意用long long;#inc

2014-04-02 17:04:40 862

原创 ZOJ 1183 Scheduling Lectures(DP)

题意:有一门课,有N个主题需要被这门课覆盖,每个主题ti有一个上课所需时间,第i+1个主题必须在第i个主题被覆盖后才能被覆盖,并且每个主题必须在一节课内被上完,每节课有一个不高兴值,不高兴值的计算已经给出了公式.给出一节课的长度,求最少需要多少节课,能够覆盖所有主题,如果存在多种方案都能满足最少节数,求出所有的不高兴值的和最少的那个不高兴值和.思路:因为题目给出了主题递增的覆盖条件,所有首

2014-04-02 12:55:05 933

原创 ZOJ 2278 Fight for Food(LIS)

题意:给出主人公的初始位置,老鼠的出现位置和时间,主人公每一个单位时间只能向邻近的格子走一步,如果走到某个格子上的时候老鼠正好出现在那个位置,那么就可以抓住它,求主人公最多能抓到多少老鼠.看起来三维的结构,其实只需要时间这一维就够了,因为两个格子的最短距离必然是曼哈顿距离,距离的计算可以是常数的,那么就相当于转换成了类似LIS的问题了.预处理的时候可以把每个点到其他所有点的所需时间都找出来

2014-04-01 17:14:17 1300

空空如也

空空如也

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

TA关注的人

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