![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
-----------OJ-----------
文章平均质量分 84
知足c
Good afternoon, Good evening and Good night~
展开
-
UVa 1339 Ancient Cipher
Ancient CipherAncient Roman empire had a strong government system with various departments, including a secret service department. Important documents were sent between provinces and the capit原创 2014-07-30 16:06:04 · 1006 阅读 · 0 评论 -
POJ 3993 Not So Flat After All(质因数)
题意 给你两个数a,b 求a,b所有的质因数个数 和每个质因数个数的差的绝对值的和 被描述得好复杂 理解了就是个水题;素数问题就先打个素数表吧 然后能被整除的就是质因数了 然后统计a,b分别能被这个数整除多少次原创 2014-08-08 10:58:05 · 914 阅读 · 0 评论 -
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 · 953 阅读 · 0 评论 -
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 · 1161 阅读 · 0 评论 -
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 · 1341 阅读 · 0 评论 -
HDU 2159 FATE(二维完全背包)
中文题目就不用解释了 就是裸的二维完全背包d[i][j]表示消耗i忍耐杀j个怪最多可获得的经验 然后就用完全背包来做了 二维背包背包不过是多了一重循环原创 2014-08-10 09:03:58 · 996 阅读 · 0 评论 -
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 · 1003 阅读 · 0 评论 -
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 · 1111 阅读 · 0 评论 -
HDU 2602 Bone Collector(01背包)
裸的01背包啦啦啦啦原创 2014-08-09 16:53:48 · 959 阅读 · 0 评论 -
POJ 3080 Blue Jeans(KMP 最长公共子串)
题意 给你n个DNA串 求它们的长度最大的公共子串 如果有多个 输出字典序最小的 长度小于3的不算每个DNA串的长度都是60 可以从子串长度为60依次递减 并枚举所有该长度子串 当某个长度的子串也为其它n-1个串的子串时 就是我们要的答案了判断是否为其它DNA串的子串直接kmp就行了原创 2014-08-09 16:41:54 · 1064 阅读 · 0 评论 -
POJ 3356 AGTC(最长公共子序列)
题意 给你两个DNA序列 求第一个第一个序列至少经过多次删除 、替换 或添加碱基得到第二个序列 其实分析一下可以发现 只要求出两个序列的最长公共子序列 这部分就可以不动了 然后较长序列的长度减去最长公共子序列的长度就是答案了原创 2014-08-07 21:33:17 · 898 阅读 · 0 评论 -
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 · 1039 阅读 · 0 评论 -
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 · 972 阅读 · 0 评论 -
POJ 2250 Compromise (DP,最长公共子序列)
题意 求两端文本的最长公共子单词序列 直接lcs增量法可以得出 打印路劲也是直接递归就行原创 2014-08-05 21:03:04 · 1089 阅读 · 0 评论 -
UVa 213 Message Decoding(World Finals1991,字符串)
题意 编写一个解码程序 对数字串进行解码输入第一行是一个解码key key从左到右每个字符分别对应0,00,01,10,000,001,011,100,101,110,0000,0001,...,1101,1110,00000,.......长度为len的字符编码有2^n-1个 而且恰好以二进制方式从0到2^n-2递增 而且字符编码的最大长度为7 可以有2^7-1=127个字符我们只需开一个key[len][val]数组 里面存的是长度为len的第val+1个字符编码 然后解原创 2014-07-31 21:02:23 · 3957 阅读 · 1 评论 -
POJ 3895 Cycles of Lanes(DFS)
题意 求无向图中的最长环直接dfs 依次对访问每个点编号 遇到已经访问过的点就是环了 编号相减就是环的长度用数组存图会超内存 所以要用vector存原创 2014-08-01 14:35:38 · 793 阅读 · 0 评论 -
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 · 1129 阅读 · 0 评论 -
POJ 3390 Print Words in Lines(DP)
POJ 3390 题意 把n个单词排版 每行最多m个字符 不同单词间有空格 每行最后一个单词后没空格 空格占一个字符 当一行的字符数与m的差为t时 就会扣t*t分 求最少扣分令a[i]表示第i个单词的长度 s[i]表示从第一个单词到第i个单词单词长度和d[i]表示前i个单词排版后最少扣的分 则t=m-(s[i] - s[j] + i - j - 1)表示把从第j+1个单词到第i个单词放在一行时这行的字符长度与m的差 那么当t>=0时 有转移方程 d[i]=min(d[i],d原创 2014-08-01 16:34:50 · 1006 阅读 · 0 评论 -
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 · 1677 阅读 · 0 评论 -
POJ 3623 Best Cow Line, Gold(模拟)
题意 给你一个字符序列 你每次可以从它的头部或尾部拿出一个字符组成一个新的字符序列 输出这样做能达到的最小的字符序列 每行最多输出80个字符(开始被这个坑了好久)直接模拟就行 哪边小就选哪边 相等就往内看#include#include#includeusing namespace std;const int N = 30010;int main(){原创 2014-08-19 19:38:21 · 1358 阅读 · 0 评论 -
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 · 1033 阅读 · 0 评论 -
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 · 999 阅读 · 0 评论 -
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 · 1290 阅读 · 0 评论 -
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 · 863 阅读 · 0 评论 -
HDU 2844 Coins (组合背包)
题意 给你n种面额不同的金币和每种金币的个数 求这些金币能组合成的面额在m内有多少种还是明显的背包问题 d[i]表示这些金币在i内能组合成的最大面额 初始化d为负无穷 d[0]=0 这样就可以保证d[i]恰好为i时才能为正值原因可以自己想想 然后就用背包背吧 直接多重背包也可以过 但是分成多重背包和完全背包要快一点原创 2014-08-10 14:49:34 · 878 阅读 · 0 评论 -
POJ 1856 Sea Battle(DFS)
题意 图中每个矩形'#'连通块代表一艘船 若一艘船与另一艘有边相邻或有角相邻 那么认为这两艘船相撞 若图中有船相撞 输出bad 否则输出图中有多少艘船可以把图的周围全包上一圈'.' 遍历图中每个点 可知当图中存在一下四种结构中的一个时 必有船相撞 输出并退出循环 否则则dfs这个点 若图中不存在这些结构 就可以输出连通块数量即轮船数了原创 2014-08-12 23:05:18 · 977 阅读 · 0 评论 -
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 · 877 阅读 · 0 评论 -
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 · 1025 阅读 · 0 评论 -
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 · 976 阅读 · 0 评论 -
HDU 1114 Piggy-Bank(完全背包 DP)
题意 知道空存钱罐的重量和装满钱的存钱罐的重量及每种币值的重量 求存钱罐里至少有多少钱 裸的完全背包 但是是求最小值 所以初始0要变成初始INF max也要变成min原创 2014-08-15 15:23:33 · 1004 阅读 · 0 评论 -
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 · 951 阅读 · 0 评论 -
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 · 1085 阅读 · 0 评论 -
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 · 1149 阅读 · 0 评论 -
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 · 1069 阅读 · 0 评论 -
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 · 1485 阅读 · 0 评论 -
Codeforce 22B Bargaining Table
HDU 1505,1506的变形 只是由求面积变成了求周长 具体分析可见http://blog.csdn.net/iooden/article/details/38379065另外这题数据比较小 也可以暴力枚举 枚举每点作为左上角 然后枚举合法的的长和宽, 判断形成的的矩阵是否全由 '0'组成, 如果是就更新结果原创 2014-08-05 22:43:48 · 1060 阅读 · 0 评论 -
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 · 1089 阅读 · 0 评论 -
HDU 2845 Beans(DP,最大不连续和)
题意 吃豆子游戏 当你吃了一个格子的豆子 该格子左右两个和上下两行就不能吃了 输入每个格子的豆子数 求你最多能吃多少颗豆子可以先求出每行你最多可以吃多少颗豆子 然后每行就压缩成只有一个格子了 里面的豆子数就是那一行最多可以吃的豆子数 然后问题就变成求一列最多可以吃多少颗豆子了 和处理每一行一样处理 那么问题就简化成求一行数字的最大不连续和问题了令d[i]表示某一行前i个豆子的最大和 有两种情况 吃第i个格子中的豆子和不吃第i个格子中的豆子 a[i]为原创 2014-08-11 20:42:14 · 973 阅读 · 0 评论 -
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 · 926 阅读 · 0 评论 -
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 · 941 阅读 · 0 评论