- 博客(69)
- 资源 (46)
- 收藏
- 关注
原创 HDU 5050 Divided Land(进制转换)
题意 给你两个二进制数m,n 求他们的最大公约数 用二进制表示 0先把二进制转换为十进制 求出最大公约数 再把结果转换为二进制 数比较大要用到大数import java.util.*;import java.math.*;public class wl6_9 { static BigInteger two = BigInteger.valueOf(2), one
2014-09-28 10:53:57 1187
原创 UVa 699 The Falling Leaves(递归建树)
题意 假设一棵二叉树也会落叶 而且叶子只会垂直下落 每个节点保存的值为那个节点上的叶子数 求所有叶子全部下落后 地面从左到右每堆有多少片叶子和上一题有点像 都是递归输入的 一个节点(设水平位置为p) 则它的左右儿子节点的水平位置分别为 p-1 p+1 也是可以边输入边处理的 输入完也就得到答案了 注意每个样例后面都有一个空行 包括最后一个#includ
2014-09-24 12:48:14 1565
原创 UVa 839 Not so Mobile(树的递归输入)
题意 判断一个树状天平是否平衡 每个测试样例每行4个数 wl,dl,wr,dr 当wl*dl=wr*dr时 视为这个天平平衡 当wl或wr等于0是 下一行将是一个子天平 如果子天平平衡 wl为子天平的wl+wr 否则整个天平不平衡容易看出 输入是递归的 所以我们可以直接递归 边输入边判断#includeusing namespace std;bool so
2014-09-24 09:17:07 1562
原创 UVa 548 Tree(建树,递归遍历)
题意 给你一个树的中序遍历和后序遍历 某个节点的权值为从根节点到该节点所经过节点的和 求权值最小的叶节点的值 如果存在多个 输出值最小的那个把树建好就好说了 递归递归dfs msun保存最小叶节点权值 ans保存答案
2014-09-23 20:22:28 1353
原创 UVa 122 Trees on the level(建树,层次遍历)
题意 建树并层次遍历输出 (data,pos) pos表示改节点位置 L代表左儿子 R代表右儿子 建树很简单 开始在根节点 遇到L往左走遇到R往右走 节点不存在就新建 走完了就保存改节点的值 输出直接bfs就行了了 #include#include#includeusing namespace std;const int maxn = 300;char
2014-09-23 10:26:45 1174
原创 UVa 11988 Broken Keyboard(模拟链表)
题意 有一个键盘坏了 会在你不知道的情况下按下home或者end 给你这个键盘的实际输入 要求输出显示器上的实际显示输入最大5MB 所以直接数组检索肯定会超时的 用数组模拟链表 就可以很快了#include#includeusing namespace std;const int N=100005;char s[N];int next[N];int main()
2014-09-17 11:14:59 1084
原创 UVa 442 Matrix Chain Multiplication(矩阵链乘,模拟栈)
题意 计算给定矩阵链乘表达式需要计算的次数 当前一个矩阵的列数等于后一个矩阵的行数时 他们才可以相乘 不合法输出error输入是严格合法的 即使只有两个相乘也会用括号括起来 而且括号里最多有两个 那么就很简单了 遇到字母直接入栈 遇到反括号计算后入栈 然后就得到结果了#include#include#includeusing namespace std;const
2014-09-17 09:32:50 1428
原创 UVa 514 Rails(模拟栈)
题意 n辆火车按顺序依次进站 判断给定的出战顺序是否可能用数组模拟模拟栈代表车站 车依次进站 每当栈顶火车序号与当前要出站的b[cur] 相等时 就让栈顶元素出栈 即top-- #include#includeusing namespace std;const int N = 2000;int b[N], c[N];int main(){ int l, cur
2014-09-16 15:20:58 1439
原创 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-09-02 09:52:12 644
原创 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-09-02 09:52:10 719
原创 POJ 3623 Best Cow Line, Gold(模拟)
题意 给你一个字符序列 你每次可以从它的头部或尾部拿出一个字符组成一个新的字符序列 输出这样做能达到的最小的字符序列 每行最多输出80个字符(开始被这个坑了好久)直接模拟就行 哪边小就选哪边 相等就往内看#include#include#includeusing namespace std;const int N = 30010;int main(){
2014-09-02 09:52:08 698
原创 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-09-02 09:52:06 647
原创 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-09-02 09:52:04 1212
原创 HDU 1300 Pearls(DP)
题意 珠宝店到珍珠批发商进货 第i种价格为p[i]的珍珠需要n个 则珍珠的结算价格为∑(n+10)*p[i] 由于没种珍珠的数量结算时都要加上10 所以有时候把便宜的珍珠换为贵的结算价格反而变少了 给你一张购买清单 珍珠价格是递增的 每种珍珠都可以替换为比它贵的 求最少总花费简单dp 令d[i]表示前i种珍珠的最少花费 sum[i]表示第1种到第第i种的总数
2014-09-02 09:52:02 601
原创 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-09-02 09:52:00 572
原创 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-09-02 09:51:57 563
原创 HDU 1078 FatMouse and Cheese(DP)
题意 老鼠在一个小镇吃奶酪 城镇可以看成一个n*n的矩阵 其中每个格子都有一定数量的奶酪mat[i][j] 老鼠从(0,0) 开始吃 而且下个吃的格子里的奶酪必须比上个格子多 老鼠只能水平方向或者垂直方向走 而且每次走的距离不能超过k 求老鼠最多能吃多少奶酪起点是固定的 比较容易 直接记忆化搜索令d[i][j]表示以(i,j)为终点的最优解 那么对于所有(i
2014-09-02 09:51:55 620
原创 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],
2014-09-02 09:51:53 550
原创 HDU 1114 Piggy-Bank(完全背包 DP)
题意 知道空存钱罐的重量和装满钱的存钱罐的重量及每种币值的重量 求存钱罐里至少有多少钱 裸的完全背包 但是是求最小值 所以初始0要变成初始INF max也要变成min#include#include#includeusing namespace std;const int N = 10005, INF = 0x3f3f3f3f;int val[N], wei[N]
2014-09-02 09:51:51 577
原创 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
2014-09-02 09:51:49 597
原创 HDU 1789 Doing Homework again(贪心)
题意 某大参加ACM竞赛回来落下很多作业 每个作业都有最后期限 没在最后期限之内做完期末就要扣掉对应的分 求最少扣多少分把所有作业按扣分大小从大到小排序 然后就贪阿 能完成前面的就完成前面的 实在不能的就扣分吧~#include#include#includeusing namespace std;const int N = 1005;int dli[N], r
2014-09-02 09:51:47 543
原创 POJ 3282 Ferry Loading IV(模拟,队列)
题意 汽车通过渡船过河 渡船开始在左边 输入按车辆来的顺序输入河两岸的车 渡船每次运输的汽车的总长度不能超过渡船自己本身的长度 先来的车先走 求轮船至少跨河多少次才能将所有的车辆都运完简单模拟 建两个队列 分别装左边的车 和右边的车 算出两边各至少需要运输多少次就行了#include#include#includeusing namespace std;
2014-09-02 09:51:45 665
原创 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就可以输出洗牌次数了#inclu
2014-09-02 09:51:43 645
原创 POJ 3481 Double Queue(STL)
题意 模拟银行的排队系统 有三种操作 1-添加优先级为p 编号为k的人到队列 2-服务当前优先级最大的 3-服务当前优先级最小的 0-退出系统可以用stl中的map 因为map本身就根据key的值排了序 对应2,3 我们只需要输出最大或最小就行了并从map中删除该键值#include#includeusing namespace std;map a;in
2014-09-02 09:51:41 679
原创 POJ 1856 Sea Battle(DFS)
题意 图中每个矩形'#'连通块代表一艘船 若一艘船与另一艘有边相邻或有角相邻 那么认为这两艘船相撞 若图中有船相撞 输出bad 否则输出图中有多少艘船可以把图的周围全包上一圈'.' 遍历图中每个点 可知当图中存在一下四种结构中的一个时 必有船相撞 输出并退出循环 否则则dfs这个点 若图中不存在这些结构 就可以输出连通块数量即轮船数了#include
2014-09-02 09:51:39 592
原创 POJ 1205 Water Treatment Plants(递推)
题意 建设一条河岸的污水处理系统 河岸有n个城市 每个城市都可以自己处理污水 V 也可以把污水传到相邻的城市处理 >或令d[i]表示有i个城市时的处理方法数 最后一个城市的处理方法有1.V 自己处理自己的 与前i-1个城市的处理方法无关 有d[i-1]种方法2.3.>V 左边有污水传过来 和自己的一起处理 这时第i-1个城市可以向右传了 如果这种情况发生的
2014-09-02 09:51:36 733
原创 HDU 1978 How many ways(DP)
题意 中文 但要注意小于你能量的点也是能到达的令d[i][j]表示到达第i行第j列的方法数 初始化为0 d[1][1]为1 输入一个点的能量t后 枚举这个点能到的所有点(i+x,j+y)(x+y#include#includeusing namespace std;const int N = 105, MOD = 10000;int main(){ int d
2014-09-02 09:51:34 541
原创 POJ 3461 Oulipo (KMP字符串匹配·统计p在s中出现次数)
题意 给你两个字符串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 k
2014-09-02 09:51:32 1061
原创 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,
2014-09-02 09:51:30 564
原创 HDU 2845 Beans(DP,最大不连续和)
题意 吃豆子游戏 当你吃了一个格子的豆子 该格子左右两个和上下两行就不能吃了 输入每个格子的豆子数 求你最多能吃多少颗豆子可以先求出每行你最多可以吃多少颗豆子 然后每行就压缩成只有一个格子了 里面的豆子数就是那一行最多可以吃的豆子数 然后问题就变成求一列最多可以吃多少颗豆子了 和处理每一行一样处理 那么问题就简化成求一行数字的最大不连续和问题了
2014-09-02 09:51:28 532
原创 HDU 2844 Coins (组合背包)
题意 给你n种面额不同的金币和每种金币的个数 求这些金币能组合成的面额在m内有多少种还是明显的背包问题 d[i]表示这些金币在i内能组合成的最大面额 初始化d为负无穷 d[0]=0 这样就可以保证d[i]恰好为i时才能为正值原因可以自己想想 然后就用背包背吧 直接多重背包也可以过 但是分成多重背包和完全背包要快一点#include#include#include
2014-09-02 09:51:26 534
原创 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个的话
2014-09-02 09:51:24 681
原创 HDU 2870 Largest Submatrix(DP)
题意 求最大相同字符子矩阵 其中一些字符可以转换其实就是HDU1505 1506的加强版 但是分了a,b,c三种情况 看哪次得到的面积最大对于某一个情况 可以把该字符和可以转换为该字符的位置赋值0 其它位置赋值1 这样就转化成了求最大全0矩阵的问题了对于转换后矩阵中的每个点 看他向上有多少个连续0 把这个值存在h数组中 再用l数组和r数组记录h连续大于等于该位置的最左边位置和
2014-09-02 09:51:22 525
原创 HDU 2830 Matrix Swapping II (DP,最大全1矩阵)
题意 给你一个n*m矩阵 每列都可以随便交换位置 求最优交换后最大的全1子矩阵又是HDU 1505 1506的变种 但这个更容易了 因为每列都可以交换位置了 那么这一行中所有比i高的都可以与i相邻了 只需要统计这一行有多少个比i高就行了 可以在算出每一行后 把高度大的放前面去 用num[i]记录排序后的列原来的数 这样就有j列比h[i][num[j]]高了 最后的
2014-09-02 09:51:20 549
原创 HDU 1069 Monkey and Banana(DP 长方体堆放问题)
Monkey and BananaProblem DescriptionA group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, prov
2014-09-02 09:51:18 696
原创 HDU 1171 Big Event in HDU(多重背包)
Big Event in HDUProblem DescriptionNowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don't know that Computer College had ever been split into Comput
2014-09-02 09:51:16 531
原创 HDU 2159 FATE(二维完全背包)
中文题目就不用解释了 就是裸的二维完全背包d[i][j]表示消耗i忍耐杀j个怪最多可获得的经验 然后就用完全背包来做了 二维背包背包不过是多了一重循环#include#include#includeusing namespace std;const int N = 105;int main(){ //还需的经验值n,保留的忍耐度m,怪的种数k,最多的杀怪数s
2014-09-02 09:51:13 533
原创 HDU 2577 How to Type(模拟)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2577 题意 给你一个由大写字母和小写字母组成的字符串 模拟键盘输入的最少按键次数直接模拟每个字符的输入 flag表示capslock的状态 1表示打开 0为关闭 开始是和输入完毕都是关闭的关闭的 用plu记录shift和capslock的按键次数当接下来输入的字母
2014-09-02 09:51:11 525
原创 HDU 1087 Super Jumping! Jumping! Jumping!(DP)
Super Jumping! Jumping! Jumping!Problem DescriptionNowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. Maybe you are a good boy, and know little ab
2014-09-02 09:51:09 508
原创 HDU 2602 Bone Collector(01背包)
Bone CollectorProblem DescriptionMany years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also h
2014-09-02 09:51:07 489
(HDUACM201303版_15)筛选法及预处理(附菜鸟的23个经典错误)
2014-08-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人