HDU
文章平均质量分 56
亚N程
这个作者很懒,什么都没留下…
展开
-
HDU:3413 Single CPU, multi-tasking
整个比赛时间都卡在上面了最后也没做出来。数据量是10000000,一秒一秒的模拟会超时。所以应该优化。我后来想到的办法是取它们所有的数字的整数部分的最小值,并都减去这个最小值。然后再模拟。感觉已经极大程度提高效率但没想到还是超时。后来发现一个bug。如果有一个数在减去最小值的时候变成0了,这时候它的完成时间是没办法统计的,会造成死循环。解决办法就是减去(最小值-1),这样在原创 2013-08-01 16:25:59 · 701 阅读 · 0 评论 -
HDU:4771 Stealing Harry Potter's Precious
杭州现场赛的题目,虽然大神们都说水,但我感觉还是不错的,还适合我这个水平做。用bfs求出各个宝物之间的最短距离以及和Dudely之间的距离,然后用dfs枚举Dudely访问各个宝物的顺序,最后比较出距离和的最小值即可。 #include#include#include#include#include#define INF 2139062143#define MAXN 105原创 2013-11-11 12:35:33 · 752 阅读 · 0 评论 -
HDU:Good Numbers
每10个数中必有一个各位数字和可以被10整除的数。算的时候特判一下边界。另外注意0也是符合的。还有就是要用%I64d。 #include #include #include #include #include #define ll long longusing namespace std;ll Sum(ll val){ ll sum=0;原创 2013-11-29 12:21:12 · 589 阅读 · 0 评论 -
HDU:4109 Instrction Arrangement (DAG上的最长路/关键路径)
题意:给你一些指令,指令Y要在X发生后Z秒之后才能发生,问执行全部指令最少需要的时间。思路:关键路径的长度。用动态规划求最早开始事件时间,由于需要从子问题开始求解,因此使用拓扑排序进行排序。#include #include #include #include #include #include #include #define MAXN 1005using原创 2013-10-03 18:19:10 · 1675 阅读 · 3 评论 -
HDU:4738 Caocao's Bridges
无向图求桥。虽然是模版题但是有几个trick。1,图可能不连通,这样答案输出02,有重边,重边肯定不是桥3,如果最小值是0,那么应该输出1,因为至少要派一个人去炸桥。#include #include #include #include #include #include #include #include #define ll long lon原创 2014-02-13 19:29:12 · 636 阅读 · 0 评论 -
HDU:1754 I Hate It
开始刷线段树的题。上一道是单值加减,区间求和,我用树状数组过掉了。这道题是单值更新,区间求最值,只能用线段树了。用了watashi翻译的那本书上的模版,把半闭半开的区间改成了全闭区间。另外数组开的大小问题还是不太懂。。 #include #include #include #include #include #include #include #includ原创 2014-01-25 22:39:31 · 793 阅读 · 0 评论 -
HDU:1698 Just a Hook
线段树区间更新,区间求和。模版题。#include #include #include #include #include #include #include #include #include #include #define ll long long#define INF 2139062143#define inf -2139062144#define MOD原创 2014-03-15 21:33:17 · 594 阅读 · 0 评论 -
HDU:1166 敌兵布阵
之前用树状数组过掉了,这次用线段树重写了一遍,和求区间最值的那代码基本一样。。 #include #include #include #include #include #include #include #include #include #include #define MAXN 200005#define MOD 1000000007#原创 2014-01-25 23:11:26 · 709 阅读 · 0 评论 -
HDU:2795 Billboard
再次领教了线段树的威力。维护一个最大值,优先选择左边的,更新操作写在了查询里面。 #include #include #include #include #include #include #define ll long long#define INF 2139062143#define MAXN 105using namespace std;con原创 2014-01-27 17:54:09 · 618 阅读 · 0 评论 -
HDU:1394 Minimum Inversion Number
用线段树求原始序列的逆序数,然后再递推求其它时候的逆序数,比较得最小值。线段树求逆序数的原理跟树状数组一样,都是利用区间求和。我这里为了方便自己写的线段树,把下标调整成了从1开始到n把当前第一个元素移动到末尾位置时,总逆序数的变化是:加上大于该数的个数,减去小于该数的个数。 #include #include #include #include #include原创 2014-01-26 23:50:22 · 547 阅读 · 0 评论 -
HDU:4751 Divide Groups
今年网络赛的一道题。问是否能分成两个完全图,转化为判断是否二分图。关键在于建图上面。如果两个人不是互相认识,那么一定处于不同集合,根据这点建图,也就是不是互相认识的人之间连边。 #include#include#include#include#include#include#define MAXN 105using namespace std;boo原创 2013-12-16 14:03:05 · 639 阅读 · 0 评论 -
HDU:3555 Bomb
一点没动脑。把上个题的代码改了改,先求不包含49的数个数目,然后删去就行。HDU上lld,llu似乎是不行的。用了cin和cout。#include #include #include #include #include #include #define ll unsigned long long#define INF 200000000#define MO原创 2014-02-09 21:26:20 · 578 阅读 · 0 评论 -
HDU:2089 不要62
数位dp。学习了这篇PPT。http://wenku.baidu.com/link?url=mUxdsYomenU-e9SFVPacVtXysemiQA4KnP1EldVuYaB8ECiaLQN4VIAEc19MmHQWQeFqUrU4oFpsX2J1LvrAeoJyAmDYdwMODM8mm3ph327注意是右边是开区间。用到了区间的分解,说得很详细。#include #incl原创 2014-02-09 19:54:08 · 567 阅读 · 0 评论 -
HDU:4651 Partition
经典的整数划分问题。使用O(n^2)的办法必超时。用这个公式可以递推出来。注意n-k*(3*k-1)/2>=0,n-k*(3*k+1)/2>=0。#include #include #include #include #include #include #include #include #include #define ll long lo原创 2014-02-27 19:41:16 · 717 阅读 · 0 评论 -
HDU:2955 Robberies
背包的变形。需要变化一下思维,dp[i][j]表示在前i个银行抢到j钱时不被抓到的最大概率。答案是小于P时,j的最大值。 #include #include #include #include #include #include #include #include #include #include #define MAXN 1000005#原创 2014-01-21 22:46:04 · 575 阅读 · 0 评论 -
HDU:1045 Fire Net
以前在UVa做得这道题是搜的题解。几个月以后重做这道题发现异常简单。直接搜索每个空的位置能否放置大炮即可。 #include #include #include #include #include #define MAXN 20using namespace std;int x[MAXN],y[MAXN],n,ans;bool place[MAXN][M原创 2013-11-16 12:41:43 · 532 阅读 · 0 评论 -
HDU:4770 Lights Against Dudely
这个题最多只有15个位置,每个位置放或者不放,可以通过回溯来解决。果然我回溯很弱,虽然一开始就想到了这个算法却傻乎乎的写了个阶乘的算法,果断超时。后来重写了以后交上去WA了。可能是代码写得比较搓,就参考cdc的代码格式又写了一个,他的思路和我的是一样的,然后就A了。对比之后发现他的代码在回溯之后恢复状态是恢复了四周全部的,而我原来只恢复了可以照到的位置,按理来说这里应该不会有问题的。原创 2013-11-15 15:17:45 · 600 阅读 · 0 评论 -
HDU:4432 Sum of divisors
这个题只要按照题目模拟就好了,其实挺水的,没什么好分析的。 值得注意的地方是计算因子的时候,循环里要给N开方,否则会超时。还有数组不必太开的超大。 当时比赛的时候没有做出来,其实我应该早点看rank的,那么多人做出来就说明很简单。现在跟榜也算是一种经验了吧。 #include#include#include#include#include #inc原创 2013-08-01 16:04:13 · 678 阅读 · 0 评论 -
HDU:1003 Max Sum
最大连续子序列和的问题,之前做过好多次了。这里我用了O(n)的算法。如果和小于0,那么再加一个元素也只会比原来的元素更小,所以不如舍去前面小于0的部分。从当前元素开始求和,同时更新起点终点为当前元素。如果和大于0,那么就加上当前元素(不必考虑当前元素的正负)(和等于0执行此步操作会使最大连续子序列更长),同时更新终点为当前元素。在这过程中更新最大值,并记录对应始末位置。 O(n)的原创 2013-08-04 11:02:22 · 633 阅读 · 0 评论 -
HDU:4379 The More The Better
这个题目也算折磨了我一下午了。解决问题关键在于Yi + Yj 。这说明序列Y中至多有1个数字可以大于等于L/2,否则两者之和将大于L。而序列X中任意小于等于L/2都可以放进序列Y中,而大于等于L/2的至多有一个。如果有的话,那么一定是X中大于等于L/2那些序列里面最小的那一个。只要这个最小的与Y序列(即X中小于等于L/2的序列)最大的那个之和小于等于L,就能够把这个最小的放进Y中。原创 2013-07-28 17:22:19 · 677 阅读 · 0 评论 -
HDU:4403 A very hard Aoshu problem
这要要用回溯法来做。好久没做回溯的题了,几乎忘光了~但是我开始看到这个题的时候居然一点思路都没有。回想以前做过的回溯题,八皇后,数学表达式,全排列都有一个特点,都是试图枚举出全部情况,只不过有些不合要求的情况被直接否了。这种枚举是层次性的,可以说是无限个循环,不是几个循环可以写出来的。这道题,放的加号没有限制,等号只能放一个。先写一个循环枚举等号的位置,然后就进入递归可以枚举加原创 2013-08-06 21:08:48 · 592 阅读 · 0 评论 -
HDU:3777 Page Count
其实是个最长覆盖区间的问题。 要注意很多细节。依照左端点排序,开始扫描寻找右端点最大值。求解过程中有三种情况。如果左端点比之前的右端点最大值要大,那么此时最大右端点就是当前的。在答案里加上该段区间长度即可,不要忘了要加一,因为这是个闭区间。如果右端点比之前的右端点最大值要小或相等,那么说明这段区间被覆盖了,长度已计算,可以无视掉。如果右端点比之前的右端点最大值要大,那原创 2013-08-12 21:28:42 · 951 阅读 · 0 评论 -
HDU:3779 Railroad
记忆化搜索。 使用递归实现,注意结束条件。 #include #include #include using namespace std;int N1,N2;int a[1005]= {0},b[1005]= {0},c[2005]= {0};int vis[1005][1005];int solve(int i,int j,int pos){原创 2013-08-12 20:21:33 · 836 阅读 · 0 评论 -
HDU:1561 The more,The Better
树形DP+依赖背包。 刚刚接触这东西。。先要把多叉树转化为二叉树。 #include#include#include#includeusing namespace std;int p[205];int c[205],b[205],dp[205][205];int solve(int x,int y){ if(dp[x][y]!=-1)原创 2013-08-28 19:01:55 · 639 阅读 · 0 评论 -
HDU:3953 I'll play a trick on you
有趣的坑爹的题目。 如果以为第三个数是前两个数之差那你就上当了。 不多说了。 #include #include #include #include using namespace std;int main(){ int T,kase=0; scanf("%d",&T); while(T--) {原创 2013-08-16 19:59:26 · 678 阅读 · 0 评论 -
HDU:3951 Coin Game
第一次接触博弈论的题目。 引用一下。 题意:给你n个硬币排成一圈,编号1-n,只能翻转连续的1~k个的硬币。翻最后一枚硬币者赢。思路:博弈 1) 若k=1,则一次只能去翻一枚,奇数先手赢,偶数后手赢。 2)若k>1: a: 先手一次翻完,先手赢;原创 2013-08-16 20:21:34 · 593 阅读 · 0 评论 -
HDU: 4731 Minimum palindrome
题意:定义value为一个字符串中的最长回文字串的长度。用前m个字母(字母表中的前m个,可以不全用)表示一个长度为n的字符串。输出value最小时的字符串。 第一次打网络,结果只做出一道水题。这道题完全没有思路,即使最后想出一点点东西也是队友想的,也没能做出来。 m=1的时候只能不断的输出a。m>=3的时候可以abcabc这样不断循环。难点就在在于m=2的时候,n原创 2013-09-15 10:49:04 · 749 阅读 · 0 评论 -
HDU:3650 Hot Expo
题意:sunnuy要游览世博会,每天都有N个节目,然后给你N个节目的起止时间,他不想错过所有节目,问你看完全部节目最少要多少天。思路:只需要知道最大重叠区间的重叠数是多少即可。可能是我做区间的贪心问题做多了,这道题用拿老一套居然不行。好在数据量比较小,但凡有节目的时间段就+1,最后统计最大值是多少即可。 #include #include #include #include原创 2013-10-08 21:42:35 · 676 阅读 · 0 评论 -
HDU:1711 Number Sequence(KMP)
题意:给两组数组,如果第二个数组在第一个数组里面出现则输入第一次出现的位置,否则输出-1。思路:标准的KMP模版题。因为数组开小WA1次,没有注意到KMP匹配过程中子串应该从首字符的下标开始又WA1次。总之还是对KMP不熟悉。 #include #include #include#include#includeusing namespace std;int L,l;i原创 2013-09-25 17:56:19 · 583 阅读 · 0 评论 -
HDU:4104 Discount
题意:问你一组数字中选几个数字相加不能得到最小的数字是多少。思路:首先将n个数字升序排序,将前i个数字相加得到和为sum,如果第i+1个数大于sum(1--i)+1,那么必不能得到sum(1-i)+1,所以sum(1--i)+1就是答案;如果将所有数字都相加也没有出现刚才的情况,那么答案就是sum(1--n)+1. 虽然网上都说这个题很水,我觉得是因为杭电数据太弱了以至于直接输出sum原创 2013-09-25 08:18:54 · 702 阅读 · 0 评论 -
HDU:1285 确定比赛名次 (拓扑排序)
题意:拓扑排序,已保证无环,要求输出最小字典序思路:拓扑排序模版题+优先队列。拓扑排序:首先寻找入度为0的顶点加入到优先队列中。将最优先顶点弹出,然后删除掉从该顶点出发的所有边(边的另一顶点入度减一),当出现入度为0的顶点时加入到优先队列中,如此循环直到队列为空。 图用邻接表实现。这里用优先队列保证每次先输出的是最小的数字。 #include #include原创 2013-09-29 23:07:19 · 648 阅读 · 0 评论 -
HDU:1176 免费馅饼
其实是经典的数塔问题。。 dp[i][j]=max(dp[i+1][j-1],max(dp[i+1][j],dp[i+1][j+1]))+gl[i][j];最后答案是dp[0][5] #include#include#include#include#include#includeusing namespace std;int gl[100002][12]= {0};原创 2013-10-25 12:04:52 · 619 阅读 · 0 评论 -
HDU:1427 速算24点
比赛的时候没能出,确实是我这方面太弱。一开始想到了全排列和回溯,但其实单纯的全排列一次只能解决一个问题而且受运算符影响,比如(a b)(c d)这种的全排列就算不了。问题还是出现在dfs上。我这里是学习了xlc的。不得不佩服一下,把计算分为两部分,如果这两部分计算便是从左往右的计算,如果与后面的计算就可以多个同时计算,确实是很巧妙,我还得慢慢研究一下。#include#include#原创 2013-10-22 07:27:59 · 876 阅读 · 0 评论