
ACM_HDU
luke2834
A junior researcher~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU-5135 广州现场赛题
题意 给你n个边,让你自由组合三角形,让总面积最大,边不能重用,不能拼接。总边数不超过12,边长不超过100。 这题说来都是泪...这题数据很水,其实直接贪心就能过...我们比赛的时候也想了下贪心,不过一想不对啊,就没尝试...结果暴力写碎了。。。算了,伤心事不提了.... 思路1 暴力枚举,再用海伦公式,状态数C(12,3)*C(9,3)*C(6,3)*C(3,3),这样状态其实有重原创 2015-01-27 13:03:33 · 602 阅读 · 0 评论 -
2015百度之星 初赛2 连接的管道 最小生成树
题意:老 Jack 有一片农田,以往几年都是靠天吃饭的。但是今年老天格外的不开眼,大旱。所以老 Jack 决定用管道将他的所有相邻的农田全部都串联起来,这样他就可以从远处引水过来进行灌溉了。当老 Jack 买完所有铺设在每块农田内部的管道的时候,老 Jack 遇到了新的难题,因为每一块农田的地势高度都不同,所以要想将两块农田的管道链接,老 Jack 就需要额外再购进跟这两块农田高度差相等长度的原创 2015-05-31 22:00:06 · 455 阅读 · 0 评论 -
HDOJ 5360 优先队列&简单线段树
题意 邀请n个人去玩,每个人接受邀请的条件是当前已接受邀请的人数m >= li && m 思路 这里给两个思路吧。。。比赛时想了个线段树的思路,写起来麻烦些,结果0写成了1,T掉了,还以为是复杂度估错了。。。没想到死循环了。。。醉了。。。总体思路比较简单就是贪心,枚举人数,选择符合条件的人里面,R最小的即可。所以主要问题是怎么快速的找到当前符合条件的人里,R最小的那个人,这里给两个方案。原创 2015-08-09 17:23:45 · 416 阅读 · 0 评论 -
hdu5537 2015ACM上海现场赛B题 构造题
题意给你两个数n和k。有一棵完全二叉树,他的节点编号id是根节点为1,左孩子2i,右孩子2i+1。你有一个数x,开始为0,从根节点出发,在一个节点上选择用x减去id或者加上id,然后可以去左孩子或者右孩子,每次加或减算一次操作,问你如何k次操作后使得x == n。1<=n <= 10^9n <= 2^k <= 2^60思路我们看最左边的一枝,第m层的节点id = 2^(m-1),如果每次原创 2015-11-30 10:52:48 · 1408 阅读 · 0 评论 -
hdu5521 修改的mlog(n)的Dijkstra算法 2015ACM沈阳现场赛题
题意给你n个点,从其中选出一些点可以构成一个点集合,给你m个点集合,在一个集合里的点相互到达的时间是d问你从1号点和n号点分别出发一个人,选在哪些点相遇,可以使总的相遇时间最短。n是2~100000,每个点集合里的点个数和小于10^6思路朴素的想法,就是对求1和n到各个点的最短路,然后选取对于每个点计算max(dis(1),dis(n)),再选取其中最小值的点。但由于之间建图,会出现一个原创 2015-11-21 10:03:28 · 528 阅读 · 0 评论 -
hdu5596
题意n个人排成序列,每个人有类别ai(0或1),权值bi,一共n秒,第i秒,第i个人前面的很它类别不同,权值小于它的离开队伍。另外,还有一些时间点,在这些时间点i后,前i个人bi加1,问最后队伍能剩几个人。思路倒着看序列,每次维护两种类别的最大值即可。复杂度O(n)注意时间点有可能重复。。。实现#include <iostream>#include <cstring>#includ原创 2015-12-19 08:06:55 · 381 阅读 · 0 评论 -
hdu5556 2015ACM合肥现场赛题 二分图最大独立集
题意在一个n*m的矩阵中,标记为’.’的为单独的一个点,标记为同一个数字的单元格和在一起是一个点,且是四联通的,为你这样建图之后它的最大独立集。n,m <= 10,数字数是0~9思路枚举0~9哪些放入独立集中,这样有2^10的复杂度在上述的基础上,建立二分图,具体来说,是数字格的单元格不作为二分图的点加入,是放入独立集的数字格周围的单元格不算做二分图里的点。剩余的点,i+j 是奇数的作为原创 2015-12-08 08:57:29 · 1262 阅读 · 0 评论 -
hdu4864 贪心+平衡二叉搜索树(map)
题意n个机器,m个任务,每个机器最多做一个任务,每个任务最多被一台机器做每个机器和任务有两个属性,x和y,机器这两个属性都分别大于等于任务的这两个属性时才可做该任务。问最多能做多少任务。另外,一个任务完成挣500x+2y的钱数,在任务数达到最多的前提下,问你挣得最多的钱数。思路贪心,把任务和机器分别按两个属性从大到小排序,x是第一优先级,y是第二遍历任务和机器,对每个任务,所有机器的x原创 2015-12-08 19:41:04 · 1174 阅读 · 0 评论 -
hdu1754 区间查询+点修改 分块模板
题意就是有区间查询最大值,和点置数思路题很裸,用线段树当然很简单~这里想练练分块。。其实是,因为用分块写了个别的题结果T了。。。不想让这段代码废了。。就找来这题水一水,测试一下分块写的对不对。。。以后就当个小模板吧。。。实现#include <bits/stdc++.h>using namespace std;const int maxn = 2e5 + 5;const int B原创 2016-01-27 23:21:18 · 929 阅读 · 0 评论 -
hdu1011 树形背包
#include #include #include #include using namespace std;const int maxn = 105;int n,m;int dp[maxn][maxn];int w[maxn];int v[maxn];struct Edge{ int v,next;}edge[maxn<<1];int g[maxn];void ad原创 2015-04-30 01:10:42 · 415 阅读 · 0 评论 -
hdu1561 树形背包初探
Problem DescriptionACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物。但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。你能帮ACboy算出要获得尽量多的宝物应该攻克哪M个城堡吗? Input每个测试实例首先包括2个原创 2015-04-29 22:02:32 · 471 阅读 · 0 评论 -
hdu2089 初学数位dp
#include #include #include using namespace std;#define maxn 1000001#define maxlen 8int n,m;int f[maxlen][10];void yu(){ f[0][0] = 1; for(int i=1;i<maxlen;i++) { for(int j=0;j<=9;j++)原创 2015-04-06 12:29:57 · 436 阅读 · 0 评论 -
hdu5190 BC#34 水题
水题,4分钟过,还可以~#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define I64_MAX 9223372036854775807 typedef long long原创 2015-03-21 22:38:02 · 503 阅读 · 0 评论 -
hdu5191 BC#34
题意 参见原题,有中文版~思路 只要砖的数量够就肯定可以达到目标~然后想想暴力怎么做呢?枚举i,看i到i+w的序列,去找比h高的砖堆高出的总数和比h矮的砖堆矮的总数,然后取max,就是这个子序列需要移动砖的总数~因此W*n的复杂度,找到最优的情况~但是复杂度超了,所以考虑i~i+W这个序列和i+1~i+W+1这个序列,高的总数和矮的总数是可以递推过来的~因此降到O(n)的复杂度。另外,他说可以原创 2015-03-21 22:42:32 · 483 阅读 · 0 评论 -
hdu 5195 BC#35 拓扑排序 优先队列 重复入队的想法 十字链表
题意 求可以删除K条边的DAG图的最大字典序的拓扑序列思路 用优先队列维护入度小于等于K的点(注意入队后,不改变K),BFS,每次看堆顶元素i的入度是否小于等于当前的K,是则K减入度,删去到i的边,继续从i搜索,否则出队,继续看堆顶元素,重复上述步骤。继续搜到的点入度如果小于等于当前K则入队,注意维护是否入队的数组,不要重复入队~注意点:(1)拓扑排序删边,不用真删,只要维护入度数原创 2015-03-30 21:10:40 · 551 阅读 · 0 评论 -
hdu1556 树状数组 区间修改,点查询
#include #include using namespace std;const int maxn = 100005;int tree[maxn];int n;inline int lowbit(int x){ return x&(-x);}void update(int i,int x){ while(i<=n) { tree[i] += x; i原创 2015-03-23 18:28:40 · 392 阅读 · 0 评论 -
hdu2689 树状数组 逆序数
#include #include #define maxn 1003int tree[maxn];int n;inline int lowbit(int x){ return x&(-x);}void update(int i,int x){ while(i <= n) { tree[i] += x; i += lowbit(i); }}int que原创 2015-03-23 18:38:20 · 443 阅读 · 0 评论 -
hdu5025救唐僧 优先队列实现的BFS再加点状压 网赛题~
题意 在一个矩阵里,救唐僧,要求在其中收集够钥匙,才能救。另外,一些cell中有蛇,通过这样的房间要杀掉蛇并多花一分钟,最后问你最少花费多产时间。思路 做这题,本来想要练练A*的,结果h函数设计的还是不够好,WA了,没办法,还是让h函数为0过了...之后还得想再设计一些h函数试试~ 这题中蛇不超过5只,用状态压缩一发就行了~其它的就是有些琐碎实现的时候要多注意一下就好了~#incl原创 2015-03-17 22:18:17 · 475 阅读 · 0 评论 -
hdu5192 BC#34 树状数组维护
问题描述乐乐又开始搭积木了。他想在昨天搭完的积木上,重新搭建,使得其中有连续W堆积木具有相同的高度,同时他希望高度最少为H。乐乐的积木都这了,也就是说不能添加新的积木,只能移动现有的积木。他可以把一个积木从一堆移动到另一堆或者新的一堆,但是不能移动到两堆之间。比如,一次移动之后,"3 2 3" 可以变成 "2 2 4" 或者 "3 2 2 1",但是不能变成"3 1 1 3".请你帮他原创 2015-03-24 11:15:33 · 546 阅读 · 0 评论 -
hdu3652 数位DP
#include #include #include #include using namespace std;const int maxlen = 11;int f[maxlen][10][2][13];int pow10(int x){ int ret = 1; for(int i=0;i<x;i++) ret *= 10; return ret;}voi原创 2015-04-08 11:09:11 · 418 阅读 · 0 评论 -
hdu2147 简单博弈dp
题意一个n*m的矩阵从右上角开始,两个人可以选择向左、下或左下移动,问先手能否取胜思路dp(i,j)表示到达i,j点的状态为必胜态还是必败态预处理2000*2000的dp,之后查询即可注意,空间给的很小,更新dp的时候最好用迭代的方式实现#include <bits/stdc++.h>using namespace std;bool dp[2002][2002];typedef p原创 2016-01-13 21:39:01 · 482 阅读 · 0 评论