- 博客(20)
- 资源 (5)
- 收藏
- 关注
原创 HDU1695 GCD 数论之 莫比乌斯反演
做了一段时间的DP,继续回头啃数论了,这是一道莫比乌斯反演的题目,比较繁琐给你a,b,c,d,k五个数,其中a=c=1固定的,让你从[a,b]中找出x,[c,d]中找出y,是的gcd(x,y) == k,注意gcd(x,y) 与gcd(y,x)归为同一种,问一共能找到多少组x,y;分析:因为gcd(x,y) = k,充要条件gcd(x/k,y/k) = 1,所以区间可以
2014-02-28 21:50:36 1266
原创 HDU2476 String painter 区间DP
给你两个字符串s1,s2,问 把s1变成s2最少需要几步?变的要求是连续的一段一起变化,语文不好表达不清楚可以看看这个博客对于案例的解释http://blog.csdn.net/libin56842/article/details/9708807给出两个串s1和s2,一次只能将一个区间刷一次,问最少几次能让s1=s2例如zzzzzfzzzzz,长度为11,我们就将下
2014-02-27 20:24:53 1123
原创 POJ3661 Running 动规
一个人跑步,n分钟,每分钟跑得距离不同并给出了,有一个累的程度,每跑一分钟累的程度+1,当这个值到达m时,必须休息,而且必须休息到疲劳度为0才能继续,每休息一分钟疲劳度-1,当他疲劳度没满时,他也可以选择休息,求n分钟疲劳度为0的时候能跑的最远距离,可以用二维DP解决,dp[i][j]表示 第i分钟疲劳度为j时的最大距离,最终解就是dp[n][0];第一个方程 :dp[i][j] = dp
2014-02-26 20:20:35 886
原创 POJ3280 Cheapest Palindrome 区间DP
给你一个字符串,把它变成回文串,可以添加字母也可以删除其中的字母,对于每一个字母添加和删除需要不同的花费,问使得这个字符串变成回文串最少需要花多少区间DP,从后向前推,如果区间[i,j] s[i] == s[j],那么dp[i][j] = dp[i+1][j-1], 如果不想等 那么要么是加上一个 或者删除一个,在这里举个例子把,当推到abcb的时候,操作无非两种 删除a或者加上一个a,这两
2014-02-25 22:31:53 768
原创 POJ2955 Brackets 动态规划
区间DP,给你一个字符串,请输出最大匹配数*2,其中()匹配,[]匹配,本来的想法是分开写,不过是要正着找,一个是区间[i,j]若 s[i] == s[j]的时候,方程是dp[i][j] = max(dp[i+1][j-1] + 1,dp[i][k]+dp[k+1][j]),若不相等那就更好办了dp[i][j] = max(dp[i][j],dp[i][k] + dp[k+1][j]);这样是
2014-02-24 22:31:09 818
原创 LightOJ 1422 Halloween Costumes 动态规划
区间DP,鼻祖题目,认知了 什么事区间DP,题意有点难理解,有N个宴会,对于每一个宴会,女猪脚都要穿一种礼服,礼服可以套着穿,但是脱了的不能再用,参加宴会必须按顺序来,从第一个到第N个,问参加这些宴会最少需要几件礼服,拿第一个案例来说把41 2 1 2,有4个宴会,第一个需要礼服种类为1,第二个需要礼服种类为2,以此往下推:参加第一个宴会时穿礼服1,参加第二个时,礼服1不要脱下,直接把
2014-02-24 20:10:08 864
原创 POJ1833 排列
好久不见的中文题目,排列,组合数学,对许多人都是很头疼的,这道题目算是应验了 计算机就是让人偷懒的 这句话,其实在STL里,我们用过了vector,queue,stack,map等等,都比较好用的,尽管有些耗时,这道题目可以用STL中的next_permutation(opt1,opt2)排列函数来轻松解决,pot1是指向需要数组头地址,opt2代表需要排列的长度,而且排列完全符合题目要求的:如
2014-02-24 16:22:34 930
原创 FZU2148 Moon Game
给你一些点,让你找出不同的凸四边形的个数,一开始可能想到的是凸包,后来发现n只有30,所以可以暴力枚举,那怎么样来判断是一个凸四边形呢,只要排除凹四边形就可以了, 对于一个凹四边形,总存在一个点d,跟另外三个点a,b,c, 满足这样一个关系 Sabd+Sacd+Sbcd = Sabc,自己画图可以发现的,暴力枚举四个点,四个点中若任意找出一个 满足这个式子,那么它就不是凸四边形了,就排除,若都不满
2014-02-23 19:35:49 917
原创 POJ1141 ZOJ1463 Brackets Sequence 经典动态规划 区间DP
对于这道题目WA的我想说:老子裤子都脱了,你就给我看这个?! 开始做的时候,随意看了一下案例,就是左右括号可以匹配,题目给的字符串可能不是完全都有匹配的 比如 (([]),这里就是差了一个),应该补全了输出 (([]))思路还是比较简单的,区间dp,dp[i][j]表示 区间 i 到j之间的匹配数,在这里有特殊情况的 就是 这个区间是一个闭合区间,要判断区间两端的 字符是否可以刚好匹配,若可以
2014-02-22 21:43:42 915
原创 UVA 348 Optimal Array Multiplication Sequence 区间DP
题意:给你n个矩阵,让你连乘,怎么样处理先乘哪两个后乘哪两个 会导致计算次数最少,简单线性数学知识:矩阵乘法的 运算次数是跟乘的顺序有关的,并且输出来这个数据输出是比较繁琐的,还好前面做过几道 都是类似于记录路径 并输出的,所以很熟练的用递归解决了这是一道矩阵连乘问题,区间DP,典型的经典例子 有详细介绍的博客 :http://www.cnblogs.com/liushang041
2014-02-14 20:26:29 1031
原创 UVA10051 Tower of Cubes
一道跟LIS比较像的题目,但是只是类似,题意:给你一些立方体,按重量有小到达给出,每个立方体有六个面,并给出这六个面的颜色,现在让你堆立方体,每一个立方体必须比它下面的轻,而且两个接触的面必须颜色相同,思路,每一个立方体其实是有六种状态的,只要记录每一个立方体的上下两个面的状态即可,还要记录此时的上表面下表面是原来的上下左右前后面的哪一面和 它是第几个立方体,统计好所有立方体的状态直接开始 寻
2014-02-13 21:52:07 828
原创 UVA10534 Wavio Sequence
题意:给你一串序列,让你序列中找出 类似这样的 1 2 3 4 5 4 3 2 1 的最大长度的子串,子串特性:1长度可以写成2*n+1,其中前n+1的序列是严格上升的,后n+1个是严格递减的;一开始我的思路是这样的:第一遍先dp一遍,找出所有的递增序列,并且记录上升序列最后一个元素的位置,第二遍 从这些上升序列的最后一个元素的位置开始寻找,若能找到一个长度与上升相等的 下降序列就停
2014-02-13 19:22:12 773
原创 UVA10404 Bachet's Game
这题目做的有些较劲,题意:给你n个石头,Stan跟Ollie按顺序取,Stan先手,题目会给你m种取法,每次取石头的数目 必须从这m种中选取一个,假设Stan 和 Ollie 每次的取石头数目 都是最完美的意思就是 输赢一开始就因为 取法 和 石头数目决定了,不会因为人为原因而影响结果这题目一看,个人 认为是一道博弈的问题,所以开始较劲了,各种寻找sg值的方法,不停的去推去寻找 必败点
2014-02-12 21:45:37 888
原创 UVA437 The Tower of Babylon 动态规划
题意:给你N种立方体,每种立方体个数不限,让你堆塔,求塔最大高度,堆塔的条件是 每一个立方体的长和宽 必须严格大于它下面的立方体的长和宽,因为每个立方体个数无限,所以必须要进行排序了,不需要按照堆塔的条件来排序,可以按照底面积的大小来排,原因很简单,还有因为立方体个数无限,外加堆塔条件限制,其实就是每一种立方体又可以演变成 六种立方体,因为没有固定 哪个是高 宽 长,都处理好以后,一看就是一个
2014-02-11 20:46:28 962
原创 UVA10465 Homer Simpson 动规
吃一个第一种汉堡耗时m,吃一个第二种耗时n,给你 t 的时间,在尽量使得时间剩下少的情况下,问最多可以吃多少个汉堡,注意实在尽量是的时间剩下的比较少,意思就是 在能做到刚好把时间花完 是最优情况,以尽量多花时间为先决条件,用背包解决,在尽量耗完时间的情况下 再求 吃的最多,瞬秒#include#include#include#include#include#include#
2014-02-11 20:15:19 809
原创 UVA10130 SuperSale 多组01背包问题
题意:超市有一些东西,重量为wi,价值为vi,一家人去购物,每个人能背的重量有限,并给出每个人的承重能力,每个商品只能卖一次,使得一家人购物的价值最大,求出这个最大值,若是一个人去购物 那就是简单的01背包问题,多个人 那就是多组咯,以前没遇到过这种类型的题目,随意YY了一下,结果一把 A 过了,直接在01背包的 状态转移方程外 再嵌套一层循环即可#include#include#
2014-02-11 19:40:28 1057 2
原创 最长上升子序列LIS集合 POJ2533,POJ1631,POJ1887,POJ1609
POJ2533 赤裸裸的求最长上升子序列,复杂度为n^2的模版#include#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long#define eps 1e-7#def
2014-02-10 20:32:41 1122
原创 UVA10131 Is Bigger Smarter? 简单动态规划
UVA确实挺坑,交个题能卡半年,全是JE,不是中国的白天是美国的晚上吗?服务器有那么爆满吗?题意:一群大象,每头大象有两个属性1:体重 2:IQ,现在从这些大象里挑出大象来排队,队伍有两个要求,每一头大象的体重必须比前一头大,IQ必须比前一头小,求此队伍的最长长度,并列出队伍中大象的序号,序号按照输入给的顺序,序号从1开始如果我们只看体重 或者 IQ会发现 就是一个最长子序列问题,
2014-02-10 16:18:32 881
原创 UVA562 Dividing coins 动态规划
一道动态规划,不是很复杂,想到了处理写起来很简单,想不到还是毫无头绪的,给你n个钱币,并给出这些钱币的面值,尽量把它们按照总面值平分成两堆,求两堆钱币的总面值的 差的绝对值刚开始看到毫无思路,找不到边界值,不知道设DP数组,状态转移也找不出来,后来想到了用背包来解决,这些钱币的总值我们知道,所以我们可以把 钱币总值作为背包容量,将钱币放入背包中,但是dp数组不是用来记录 当前背包容量的
2014-02-10 10:59:55 906
原创 UVA116 Unidirectional TSP easy DP
一道DP,题意:一张图,从第一列走到最后一列,花费最小,每次只能向右下或右上或正右方走,每一步花费为当前格子值,要求输出最小花费,并按字典序输出路线的 行变换,这里的字典序要小心,因为这个图从第一行可以直接到最后一行,反之也可以,所以相当于同样的两张图上下拼接 思路:因为要输出路径,所以用DP做的时候得逆序来做,从最后一列找到第一列,状态转移方程很简单,边界也很好找:dp[i][n]=mp
2014-02-09 20:56:50 988
输出素数C++
2014-11-10
MyInteger类
2014-11-10
TicTacToe游戏
2014-11-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人