自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Good morning,good afternoon and good night

但凡未得到 但凡是过去

  • 博客(94)
  • 资源 (4)
  • 收藏
  • 关注

原创 POJ 1840 Eqs(hash)

题意  输入a1,a2,a3,a4,a5  求有多少种不同的x1,x2,x3,x4,x5序列使得等式成立   a,x取值在-50到50之间直接暴力的话肯定会超时的   100的五次方  10e了都    然后可以考虑将等式变一下形   把a1*x1^3+a2*x2^3移到右边   也就是-(a1*x1^3+a2^x2^3)=a3*x3^3+a4*x4^3+a5*x5^3考虑到a1*x1^3

2014-08-20 08:40:10 1054

原创 POJ 3370 Halloween treats(抽屉原理)

题意  有c个小孩 n个大人万圣节搞活动  当小孩进入第i个大人家里时   这个大人就会给小孩a[i]个糖果  求小孩去哪几个大人家可以保证得到的糖果总数是小孩数c的整数倍  多种方案满足输出任意一种用s[i]表示前i个打人给糖果数的总和  令s[0]=0  那么s[i]共有n+1种不同值  而s[i]%c最多有c种不同值  题目说了c这就是抽屉原理了   n个抽屉放大于n个苹果

2014-08-19 21:54:16 1055

原创 POJ 3623 Best Cow Line, Gold(模拟)

题意  给你一个字符序列   你每次可以从它的头部或尾部拿出一个字符组成一个新的字符序列   输出这样做能达到的最小的字符序列   每行最多输出80个字符(开始被这个坑了好久)直接模拟就行  哪边小就选哪边  相等就往内看#include#include#includeusing namespace std;const int N = 30010;int main(){

2014-08-19 19:38:21 1377

原创 HDU 2059 龟兔赛跑(DP)

题意   中文简单的多阶段决策DP   令p[0]=0   p[n]=l   d[i]表示乌龟从起点到第i个加油站所需的最小时间   那么有d[i]=min(d[i],d[j]+t(j,i))   t(j,i)表示 在第j个加油站加满油  然后直接开到第i个加油站   当然第0个加油站是起点就不用加油了   这样推到最后d[n]就是乌龟所需的最小时间了#include#include#

2014-08-18 19:42:13 1108

原创 HDU 3008 Warcraft (DP)

题意  你去打boss  开始你的蓝和血还有boss的血都是100   每秒你先打boss一下  然后boss打你一下你减少q点血   你有n个技能  第i个技能耗蓝a[i]  对boss的伤害为b[i]   普攻伤害为1   而且你每秒回复t点蓝(恢复后不超过100)  求你最少可以多少次打死boss你最多能打100/q或者100/q+1次   令d[i][j]表示第i秒所剩蓝量为j时bos

2014-08-18 15:56:54 1151

原创 HDU 1300 Pearls(DP)

题意  珠宝店到珍珠批发商进货  第i种价格为p[i]的珍珠需要n个  则珍珠的结算价格为∑(n+10)*p[i]   由于没种珍珠的数量结算时都要加上10   所以有时候把便宜的珍珠换为贵的结算价格反而变少了   给你一张购买清单   珍珠价格是递增的   每种珍珠都可以替换为比它贵的  求最少总花费简单dp  令d[i]表示前i种珍珠的最少花费  sum[i]表示第1种到第第i种的总数  

2014-08-18 10:49:27 1098

原创 HDU 1501 Zipper(DP,DFS)

题意 判断能否由字符串a,b中的字符不改变各自的相对顺序组合得到字符串c本题有两种解法 DP或者DFS考虑DP 令d[i][j]表示能否有a的前i个字符和b的前j个字符组合得到c的前i+j个字符 值为0或者1 那么有d[i][j]=(d[i-1][j]&&a[i]==c[i+j])||(d[i][j-1]&&b[i]==c[i+j]) a,b的下标都是从1开始的 注意0的初始化

2014-08-18 08:42:45 967

原创 HDU 1081 To The Max(DP)

题意  求一个n*n矩阵的最大子矩阵和HDU 1003 max sum 的升级版   把二维简化为一维就可以用1003的方法去做了  用mat[i][j]存  第i行前j个数的和   那么mat[k][j]-mat[k][i]就表示第k行  第i+1个数到第j个数的和了   再将k从一枚举到n就可以得到这个这个宽度为j-i的最大矩阵和了   然后i,j又分别从1枚举到n就能得到结果了   和1

2014-08-17 15:32:21 898

原创 HDU 1078 FatMouse and Cheese(DP)

题意  老鼠在一个小镇吃奶酪  城镇可以看成一个n*n的矩阵  其中每个格子都有一定数量的奶酪mat[i][j]   老鼠从(0,0) 开始吃   而且下个吃的格子里的奶酪必须比上个格子多   老鼠只能水平方向或者垂直方向走  而且每次走的距离不能超过k  求老鼠最多能吃多少奶酪起点是固定的   比较容易   直接记忆化搜索令d[i][j]表示以(i,j)为终点的最优解  那么对于所有(i

2014-08-17 14:52:35 1046

原创 HDU 1160 FatMouse's Speed(DP)

题意  输入n个老鼠的体重和速度   从里面找出最长的序列  是的重量递增时速度递减简单的DP  令d[i]表示以第i个老鼠为所求序列最后一个时序列的长度  对与每个老鼠i  遍历所有老鼠j  当(w[i] > w[j]) && (s[i] #include#includeusing namespace std;const int M=1005;int w[M], s[M], d[

2014-08-15 16:35:16 997

原创 HDU 1114 Piggy-Bank(完全背包 DP)

题意 知道空存钱罐的重量和装满钱的存钱罐的重量及每种币值的重量 求存钱罐里至少有多少钱 裸的完全背包 但是是求最小值 所以初始0要变成初始INF max也要变成min

2014-08-15 15:23:33 1019

原创 POJ 1692 Crossed Matchings(DP)

题意 有两行数a[n1] b[n2] 分别有n1 n2个数 当第一行一个数和第二行一个数相等时 他们就可以连起来 每个数只能连一个 求最有多少条线使得每条都至少有一条和它相交令d[i][j]表示 a的前i个数和j的前j个数最多可以连接多少条当a[i]==b[j]时 将们连起来是肯定不与其它线相交的 所以d[i][j]=max(d[i-1][j],d[i][j-1])当a[i]!=b[j]时 如果可以在第一行找一个数x<i 第二行找一个数y<j 使得a[x]==b[j

2014-08-15 14:38:51 1173

原创 POJ 3481 Double Queue(STL)

题意  模拟银行的排队系统  有三种操作  1-添加优先级为p 编号为k的人到队列  2-服务当前优先级最大的   3-服务当前优先级最小的  0-退出系统可以用stl中的map   因为map本身就根据key的值排了序   对应2,3  我们只需要输出最大或最小就行了并从map中删除该键值#include#includeusing namespace std;map a;int

2014-08-15 13:56:23 1506

原创 POJ 3087 Shuffle'm Up(模拟)

题意 给两堆牌s1,s2交给你洗 每堆有c张 每次洗牌得到s12 其中s2的最下面一张在s12的最下面一张然后按顺序一张s1一张s2 洗好之后可以把s12下面的c张做s1 上面的c张做s2 求多少次洗牌之后可以得到输入给你的串s 不能得到输出-1简单模拟 s1+s2!=s就一直洗牌 如果回到初始状态都没得到s就不会得到s了 得到s就可以输出洗牌次数了

2014-08-15 09:57:39 1062

原创 POJ 3282 Ferry Loading IV(模拟,队列)

题意   汽车通过渡船过河  渡船开始在左边   输入按车辆来的顺序输入河两岸的车   渡船每次运输的汽车的总长度不能超过渡船自己本身的长度  先来的车先走   求轮船至少跨河多少次才能将所有的车辆都运完简单模拟  建两个队列  分别装左边的车  和右边的车   算出两边各至少需要运输多少次就行了#include#include#includeusing namespace std;

2014-08-14 21:46:52 1294

原创 HDU 1789 Doing Homework again(贪心)

题意  某大参加ACM竞赛回来落下很多作业  每个作业都有最后期限   没在最后期限之内做完期末就要扣掉对应的分   求最少扣多少分把所有作业按扣分大小从大到小排序  然后就贪阿  能完成前面的就完成前面的  实在不能的就扣分吧~#include#include#includeusing namespace std;const int N = 1005;int dli[N], r

2014-08-14 20:13:57 1196

原创 POJ 3461 Oulipo(KMP字符串匹配)

题意  给你两个字符串p和s  求p在s中出现的次数  很裸的kmp因为不止匹配一次  每次找到后还要循环j=next[j]的过程   知道到达s的终点#include#includeusing namespace std;const int N = 10005, M = 1000005;int next[N], ans, n;char p[N], s[M];void kmp

2014-08-14 19:57:27 1087

原创 HDU 1978 How many ways(DP)

题意 中文 但要注意小于你能量的点也是能到达的令d[i][j]表示到达第i行第j列的方法数 初始化为0 d[1][1]为1 输入一个点的能量t后 枚举这个点能到的所有点(i+x,j+y)(x+y<=t) 有d[i+x][j+y]+=d[i][j] 因为只能向右走和向下走 可以保证每次更新后均为当前最优解 输入最后一个点后 就得到答案了

2014-08-14 09:51:53 891

原创 POJ 1205 Water Treatment Plants(递推)

题意 建设一条河岸的污水处理系统 河岸有n个城市 每个城市都可以自己处理污水 V 也可以把污水传到相邻的城市处理 >或< 除了你传给我我也传给你这种情况 其它都是合法的 两端的城市不能传到不存在的城市令d[i]表示有i个城市时的处理方法数 最后一个城市的处理方法有1.V 自己处理自己的 与前i-1个城市的处理方法无关 有d[i-1]种方法2.< 给左边的城市去处理 也与前i-1个城市的处理方法无关 把自己的污水给第i-1个城市就行了 有d[i-1]种方法3.>V

2014-08-13 10:47:39 1106

原创 POJ 1856 Sea Battle(DFS)

题意 图中每个矩形'#'连通块代表一艘船 若一艘船与另一艘有边相邻或有角相邻 那么认为这两艘船相撞 若图中有船相撞 输出bad 否则输出图中有多少艘船可以把图的周围全包上一圈'.' 遍历图中每个点 可知当图中存在一下四种结构中的一个时 必有船相撞 输出并退出循环 否则则dfs这个点 若图中不存在这些结构 就可以输出连通块数量即轮船数了

2014-08-12 23:05:18 1002

原创 HDU 1058 Humble Numbers(DP,数)

题意 所有只能被2,3,5,7这4个素数整除的数称为Humble Number 输入n 输出第n个Humble Number1是第一个humble number 对于一个Humble Number a 有2*a,3*a,5*a,7*a都是Humble Number 可以以1为基数 依次展开即可得到一定范围内的Humble Number 用i,j,k,l分别记录 2,3,5,7分别乘到了第几个Humble Number 当前在计算第cnt个Humble Number 那么有 hum[c

2014-08-12 10:14:16 941

原创 HDU 2845 Beans(DP,最大不连续和)

题意 吃豆子游戏 当你吃了一个格子的豆子 该格子左右两个和上下两行就不能吃了 输入每个格子的豆子数 求你最多能吃多少颗豆子可以先求出每行你最多可以吃多少颗豆子 然后每行就压缩成只有一个格子了 里面的豆子数就是那一行最多可以吃的豆子数 然后问题就变成求一列最多可以吃多少颗豆子了 和处理每一行一样处理 那么问题就简化成求一行数字的最大不连续和问题了令d[i]表示某一行前i个豆子的最大和 有两种情况 吃第i个格子中的豆子和不吃第i个格子中的豆子 a[i]为

2014-08-11 20:42:14 998

原创 HDU 2830 Matrix Swapping II (DP,最大全1矩阵)

题意 给你一个n*m矩阵 每列都可以随便交换位置 求最优交换后最大的全1子矩阵又是HDU 1505 1506的变种 但这个更容易了 因为每列都可以交换位置了 那么这一行中所有比i高的都可以与i相邻了 只需要统计这一行有多少个比i高就行了 可以在算出每一行后 把高度大的放前面去 用num[i]记录排序后的列原来的数 这样就有j列比h[i][num[j]]高了 最后的答案也就是max(j*h[i][num[j]])

2014-08-11 19:26:03 917

原创 HDU 2870 Largest Submatrix(DP)

题意 求最大相同字符子矩阵 其中一些字符可以转换其实就是HDU1505 1506的加强版 但是分了a,b,c三种情况 看哪次得到的面积最大对于某一个情况 可以把该字符和可以转换为该字符的位置赋值0 其它位置赋值1 这样就转化成了求最大全0矩阵的问题了对于转换后矩阵中的每个点 看他向上有多少个连续0 把这个值存在h数组中 再用l数组和r数组记录h连续大于等于该位置的最左边位置和最右位置 这样包含(i,j)点的最大矩阵面积就是(r[i][j]-l[i][j]+1)*h[i][j] 面积最大的点就

2014-08-11 14:27:12 962

原创 HDU 1421 搬寝室(DP)

先把物品重量从小到大排序 d[i][j]表示前i件物品选j对的最小疲劳 若选了第i个物品 那么和它一对的必是第i-1个物品 注意是前i件i=j*2时 没有选择 d[i][j]=d[i-2][j-1]+(w[i]-w[i-1])^2i>j*2时 存在第i个选或者不选之分若选了第i个的话 那么问题就转化为在i-2个物品中选j-1个了若不选第i个的话 问题转化为在i-1个物品中选j个了那么就有转移方程d[i][j]=min(d[i-1][j],d[i-2][j-1]+(w[i]-w[i-1

2014-08-11 10:12:42 886

原创 HDU 2844 Coins (组合背包)

题意 给你n种面额不同的金币和每种金币的个数 求这些金币能组合成的面额在m内有多少种还是明显的背包问题 d[i]表示这些金币在i内能组合成的最大面额 初始化d为负无穷 d[0]=0 这样就可以保证d[i]恰好为i时才能为正值原因可以自己想想 然后就用背包背吧 直接多重背包也可以过 但是分成多重背包和完全背包要快一点

2014-08-10 14:49:34 897

原创 HDU 2577 How to Type(模拟)

题意 给你一个由大写字母和小写字母组成的字符串 模拟键盘输入的最少按键次数直接模拟每个字符的输入 flag表示capslock的状态 1表示打开 0为关闭 开始是和输入完毕都是关闭的关闭的 用plu记录shift和capslock的按键次数当接下来输入的字母有连续n个跟capslock状态不同时 分析可只 只有n=1时适合用shift键 如flag=1 n=1 输入a时 shift+a=2 而capslock+a+capslock=3n>=2 如输入ab是 shi

2014-08-10 13:26:46 1128

原创 HDU 2159 FATE(二维完全背包)

中文题目就不用解释了 就是裸的二维完全背包d[i][j]表示消耗i忍耐杀j个怪最多可获得的经验 然后就用完全背包来做了 二维背包背包不过是多了一重循环

2014-08-10 09:03:58 1012

原创 HDU 1171 Big Event in HDU(多重背包)

题意 把一堆东西尽量分为两份 第一份不小于第二份把所有东西的总价值s除以2 让它装尽量多的东西作为第二份 剩下的就是第一份了 题目有个小坑点 是以负数作为结束条件的 不是-1 还有不要开始把s/=2 后来第一份又用s*2-d[s] 因为s/2*2不一定等于s了

2014-08-10 08:14:20 1308

原创 HDU 1069 Monkey and Banana(DP 长方体堆放问题)

题意 给你n种长方体 每种都有无穷个 三条棱长为a,b,c 当一个长方体的长宽都小于另一个时 这个长方体就可以堆在另一个上面 求这些长方体能堆起的最大高度每个长方体都有6种放置方式 但只有三种高度 分别为a,b,c 为了便于操坐 可以把一个立方体分为三个 每个的高度都是唯一的 然后就可以用最长连通来求了 令d[i]表示以第i个长方体为最顶上一个时的最大高度 当第i个长方体的长和宽小于第j个的长和宽或宽和长时 第i个就可以放在第j个上面 即d[i]=max(d[i],d[j]+

2014-08-09 20:22:35 1360

原创 HDU 1087 Super Jumping! Jumping! Jumping!(DP)

题意 求n个数字的和最大的递增子序列基础的dp题目 令d[i]表示以第i个数字结尾的和最大的递增子序列 有d[i]=max(d[i],d[j]+a[i]) j为1到a之间的数 且a[i]>a[j]

2014-08-09 19:24:36 1019

原创 HDU 2602 Bone Collector(01背包)

裸的01背包啦啦啦啦

2014-08-09 16:53:48 968

原创 POJ 3080 Blue Jeans(KMP 最长公共子串)

题意 给你n个DNA串 求它们的长度最大的公共子串 如果有多个 输出字典序最小的 长度小于3的不算每个DNA串的长度都是60 可以从子串长度为60依次递减 并枚举所有该长度子串 当某个长度的子串也为其它n-1个串的子串时 就是我们要的答案了判断是否为其它DNA串的子串直接kmp就行了

2014-08-09 16:41:54 1078

原创 POJ 3993 Not So Flat After All(质因数)

题意 给你两个数a,b 求a,b所有的质因数个数 和每个质因数个数的差的绝对值的和 被描述得好复杂 理解了就是个水题;素数问题就先打个素数表吧 然后能被整除的就是质因数了 然后统计a,b分别能被这个数整除多少次

2014-08-08 10:58:05 929

原创 POJ 3934 Queue(DP)

题意 linda在一个幼儿园当老师 他要把n个学生排成一列 使只有m对学生能够讲话 当两个学生相邻或者他们之间的所有人都比他们矮时 他们就能够讲话每个学生的身高都不同令d[i][j]表示把i个学生排成一列使j对学生能够讲话的方法数可以把i个学生分成i-1个学生和一个最矮的学生 把这个学生放在i-1个学生中任意两个学生之间都不会影响原来的结果 但是能讲话的学生对数增加了2 有i-2种放法或者把这个最矮的学生放在两边 这样能讲话的对数只增加了1 有两种放法所以有转移方程d[

2014-08-08 09:31:56 1185

原创 POJ 3356 AGTC(最长公共子序列)

题意 给你两个DNA序列 求第一个第一个序列至少经过多次删除 、替换 或添加碱基得到第二个序列 其实分析一下可以发现 只要求出两个序列的最长公共子序列 这部分就可以不动了 然后较长序列的长度减去最长公共子序列的长度就是答案了

2014-08-07 21:33:17 917

原创 POJ 3292 Semi-prime H-numbers(数)

题意 所有可以表示为4*k+1(k>=0)的数都称为“H数” 而在所有“H数”中只能被1和自身整除的H数称为“H素数“ 能表示成两个”H素数“积的数又称为”Semi-prime H数“输入n 求1到n之间有多少个”Semi-prime H数“;方法 先打个H素数表 再用H素数表中的数依次相乘 得到的数都标记 再用一个数组保存每个数以内的标记数 输入n后直接读数组就行了

2014-08-07 21:24:12 968

原创 HDU 1003 Max Sum(dp,最大连续子序列和)

题意 求n个数字的最大连续和DP的入门题目 令d[i]表示以第i个数a为右端的最大连续子序列和 那么很容易得出转移方程 d[i]=max(d[i-1]+a,a)很显然 当第i个数比以第i-1个数为右端的最大和加上第i个数还大的时候 以第i个数为右端的最大和就是第i个数自己了 同时更新左端为自己

2014-08-07 10:06:51 995

原创 UVa 12657 Boxes in a Line(双向链表的应用)

题意 开始有n个盒子按1到n的顺序排列 对这些盒子进行m次操作 每次为把x移到y的左边 右边 交换x,y 颠倒顺序中的一个求操作完成后所有奇数位原盒子序号的和;直接模拟肯定会超时 用stl中的链表也超时 只能用数组自己模拟一个双向链表了 le[i],ri[i]分别表示第i个盒子左边盒子的序号和右边盒子的序号 代码中有注释

2014-08-06 21:14:47 1700

原创 UVa 679 Dropping Balls

题意 i个小球在一棵二叉树上下落 第奇数个到达某个节点就往左 否则往右 求最后一个小球下落到最底层所在结点的序号对于第i个小球 在根结点处 若i是奇数 则它是往左的第(i+1)/2个小球 若i是偶数 则它是往右的第n/2个小球 而对于一个结点k 它的左子结点序号为2*k 右子节点序号为2*k+1 每次更新i到到最底层就得出结果了

2014-08-06 14:51:17 1019

杭电ACM课件2014(含背包九讲)

刘春英老师(lcy)的ACM课件 适合ACM入门使用 比较详细的专题整理 还有经典的背包九讲

2014-07-10

适合代码的几个字体(包括Fixedsys)

个人认为适合编程用的几个字体 让你的代码看上去更舒服! 下载解压后直接移动到C盘字体文件夹就可以用了 C:\Windows\Fonts

2014-07-08

空空如也

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

TA关注的人

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