hdu
文章平均质量分 64
hzasrd
这个作者很懒,什么都没留下…
展开
-
hdu2119 Matrix
由题意可知,这其实就是让求最小覆盖点;在二分图中,选取最少的点数,使这些点和所有的边都有关联(把所有的边的覆盖),叫做最小点覆盖。可知 、最小点覆盖数 = 最大匹配数(证明略,自行百度);则按照求最大匹配数的模板来就可以了;#include#include#includeint n,m;int used[110],link[110],mat[110][110];int df原创 2016-07-25 13:41:03 · 297 阅读 · 0 评论 -
hdu1466计算交点数(DP)
m条直线的交点方案数=(m-r)条平行线与r条直线交叉的交点数 + r条直线本身的交点方案=(m-r)*r+r条之间本身的交点方案数(1)#include#include#include#include#include#include#define INF 1<<30#define N 20000using namespace std;int main(){原创 2016-09-13 21:54:47 · 255 阅读 · 0 评论 -
hdu2094产生冠军
中文题,题意就不说了。可以模拟来做,用一个字符串数组存储选手名,再相应的维护一个数组存储输赢,1代表赢,0代表输。最后遍历一下数组,如果只有一个1,就Y饿死,否则,就No#include#include#includeint n;char s[2100][1100];int main(){ int i,j; int a[2100]; whi原创 2016-05-25 14:21:51 · 258 阅读 · 0 评论 -
HDU题目分类
基础题:1000、1001、1004、1005、1008、1012、1013、1014、1017、1019、1021、1028、1029、1032、1037、1040、1048、1056、1058、1061、1070、1076、1089、1090、1091、1092、1093、1094、1095、1096、1097、1098、1106、1108、1157、1163、1164、1170、11原创 2016-08-11 20:49:40 · 344 阅读 · 0 评论 -
hdu1166 敌兵布阵(线段树经典的单点更新)
中文题目,题意还是很简单的,给你n个数,然后有4种命令方式:(1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30) (2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30); (3)Query i j ,i和j为正整数,i(4)End 表示结束,这条命令在每组数据最后出现;要求对每个Query输出相应答案。很明显,对于区原创 2016-08-12 18:17:35 · 271 阅读 · 0 评论 -
hdu2795 Billboard(线段树,单点更新)
关键在于建树更新,能想到如何建树如何查找的话,这就是一道水题,想不到的话就是一道难题。一共最多有n个宣传板,所以我们可以建一个线段树,它的叶子节点依次从1到n;这样每次查找能否放下的时候,从左儿子开始查找,看左儿子所在区间的最大值是否能放下当前的木板,能放下的话更新放下后区间的值,不能放下的话从右儿子查找,递归下去就可以了;#include#include#include#include原创 2016-08-12 20:53:15 · 261 阅读 · 0 评论 -
hdu2612 Find a way(BFS)
题意:要求Y和M到一个城市中某个KFC店所花费的时间最少,求最少时间;很简单,bfs。将Y和M能到达的各个KFC店所用的时间分别存到两个数组中,最后求出相加的最小值即可;#include#include#include#include#include#include#define INF 1<<30#define N 210using namespace std;int原创 2016-09-19 17:40:01 · 269 阅读 · 0 评论 -
hdu1495 非常可乐(规律)
网上大多都是用bfs来写的,不过其实这也是一道规律题;#include#include#include#include#include#include#define INF 1<<30#define N 210using namespace std;int gcd(int a,int b){ if(a%b==0) return b; retu原创 2016-09-19 21:46:21 · 1597 阅读 · 4 评论 -
hdu1253 胜利大逃亡(BFS)
简单的搜索题,以往做的都是二维的,这个是三维的,建好图之后按照以前的做法来就行了;#include#include#include#include#include#include#define INF 1<<30#define N 55using namespace std;int a[N][N][N],b[N][N][N];struct que{ int x,y原创 2016-09-20 13:39:20 · 282 阅读 · 0 评论 -
hdu 1873 看病要排队(优先队列)
看病要排队这个是地球人都知道的常识。 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先级。级别为10的优先权最高,级别为1的优先权最低。医生在看病时,则会在他的队伍里面选择一个优先权最高的人进行诊治。如果遇到两个优先权一样的病人的话原创 2017-07-21 21:39:33 · 677 阅读 · 0 评论 -
hdu 1595 find the longest of the shortest
Marica is very angry with Mirko because he found a new girlfriend and she seeks revenge.Since she doesn't live in the same city, she started preparing for the long journey.We know for every road how m原创 2017-08-02 14:17:52 · 215 阅读 · 0 评论 -
hdu 3183 A Magic Lamp(RMQ)
Kiki likes traveling. One day she finds a magic lamp, unfortunately the genie in the lamp is not so kind. Kiki must answer a question, and then the genie will realize one of her dreams.The questio原创 2017-08-09 16:21:52 · 235 阅读 · 0 评论 -
百度之星初赛B 1002 Factory
Problem Description我们将A省简化为由N个城市组成,某些城市之间存在双向道路,而且A省的交通有一个特点就是任意两个城市之间都能通过道路相互到达,且在不重复经过城市的情况下任意两个城市之间的到达方案都是唯一的。聪明的你一定已经发现,这些城市构成了树这样一个结构。现在百度陆续开了许许多多的子公司。每家子公司又会在各城市中不断兴建属于该子公司的办公室。由于各个子公司原创 2017-08-14 20:39:45 · 281 阅读 · 1 评论 -
hdu 2572 终曲(sustrb的用法)
题意中文题目,很简单。思路:把第一个字符串的额所有子串求出来,然后逐个判断是否包含有第二个和第三个字符串,最后打印结果就行。这里要求所有子串,可以使用c++里的一个函数strsub(i,j),第一个参数是要截取的字符串的起始位置,后一个参数是要截取字符串的长度。代码如下:#include#include#include#include#includeusing namespa原创 2017-03-06 21:05:20 · 375 阅读 · 0 评论 -
hdu5944(Fxx and string)
Problem DescriptionYoung theoretical computer scientist Fxx get a string which contains lowercase letters only.The string S contains n lowercase letters S1S2…Sn.Now Fxx wants to know how m原创 2016-10-30 19:41:45 · 390 阅读 · 0 评论 -
hdu1257 导弹拦截系统(LIS)
给你一个序列,求这个序列中不上升子序列有多少个;这道题可以转换为求原序列的最长上升子序列,即 不上升子序列的最小划分数=最长上升子序列的长度!这是一个很巧妙地转换;不明白的可以仔细想想;#include#include#include#include#include#include#define INF 1<<30#define N 20000using namespa原创 2016-09-13 16:12:05 · 425 阅读 · 0 评论 -
hdu3998 Sequence(最长上升子序列及其个数)
DescriptionThere is a sequence X (i.e. x[1], x[2], ..., x[n]). We define increasing subsequence of Xas x[i1], x[i2],...,x[ik], which satisfies follow conditions: 1) x[i1] 2) 1As an exc原创 2016-09-10 11:13:50 · 2827 阅读 · 0 评论 -
hdu2063 过山车
这是一个二分匹配最最基础的题,完全套着模板来就可以,注意一下数组的初始化就可以了;#include#include#includeint m,n;int used[550],link[550],mat[550][550];int dfs(int t){ int i; for(i=1;i<=n;i++) { if(used[i]==0&&mat原创 2016-07-25 13:37:08 · 315 阅读 · 0 评论 -
hdu1317 负权最短路(Floyd+bellman)
首先要读懂题,做这个题时读题看样例琢磨了半天才明白= =;题目的意思是,一个人从一号房间走到最后一个房间,每个房间有相应的能量值(可正可负),当走到这个房间的时候可以获取这个房间的能量值,如果走到最后一个房间时,人的能量值为正,则“winnable"”,否则的话就"hopeless",另外,这个人一开始自身有100点能量值,房间可以重复的走,且第一个房间和最后一个房间的能量值为零。首先输入原创 2016-07-24 12:45:50 · 1054 阅读 · 0 评论 -
hdu2095异或问题
异或,英文为exclusive OR,或缩写成xor异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运原创 2016-05-23 21:41:54 · 336 阅读 · 0 评论 -
hdu2546饭卡
中文题目,题意就不说了,都能看懂。转换一下就是一个背包问题。先把最大值去掉,用剩余的钱来买东西。可以把剩余的钱看作背包的体积,每一样饭菜看作每一个物品的体积,求背包里最多可以装多少东西就可以了。最后用背包剩余的体积减去最大值就行了。代码如下:#include#include#includeint cmp(const void *a,const void *b){ ret原创 2016-05-21 16:53:07 · 339 阅读 · 0 评论 -
hdu2602 Bone Collector(01背包问题)
最简单最基础的背包问题,完全可以套用模版。题意为给一堆已知体积已知价值的骨头,从中挑选几根放在一个背包里,使得所选骨头的价值之和最大。给你一个已知体积的背包,再给出骨头的数量,让求解。很典型的一个背包问题,可以逆向选择推解。状态转移方程为dp[i][j]=dp[i+1][j](j=v[i]);此处的i代表第i个背包,j代表此时背包内还剩余的体积为多少。代码如下:#include#in原创 2016-05-16 21:22:03 · 305 阅读 · 0 评论 -
hdu 1014 Uniform Generator
看网上大神说这个题实质上是求最大公约数,看是否两个数的最大公约数为1,是的话就是good;不是的话就是bad;听起来很简便,不过毕竟我是弱鸡,想不明白怎么回事,还是老老实实的按常规思路来吧。题意很简单,按照给出的公式计算,推算0~mod-1之间的数是否都出现过就行。计算出所有seed然后用个循环遍历一下看是否都有即可。注意seed是循环出现的,所以计算到第一次循环结束就可以了。#inclu原创 2016-05-13 13:31:14 · 276 阅读 · 0 评论 -
hdu1068Girls and Boys(求二分图的最大独立集)
这道题是让求最大独立集,最大独立集=节点数-最大匹配数;建好图后套用模板就行了;#include#include#include#define N 1100int n;int used[N],mat[N][N],link[N];int dfs(int t){ int i; for(i=0; i<n; i++) { if(used[i]==原创 2016-07-25 17:55:22 · 284 阅读 · 0 评论 -
hdu1151(最小路径覆盖)
求二分匹配最小路劲覆盖问题,最小路径覆盖=节点数-最大匹配数;#include#include#include#define N 1100int n,m;int used[N],link[N],mat[N][N];int dfs(int t){ int i; for(i=1;i<=n;i++) { if(used[i]==0&&mat[t]原创 2016-07-25 17:57:35 · 329 阅读 · 0 评论 -
hdu1083 COURSES(匈牙利水题)
一道匈牙利算法的水题,题目让求恰好满足:1,每个学生都要选一门课程;2,每个课程都有一个学生选择。很明显,求出二分图的最大匹配数,如果等于课程数目,就YES,不等就NO;#include#include#include#define N 310int n,p;int used[N],mat[N][N],link[N];int dfs(int t){ int i;原创 2016-07-25 20:34:23 · 239 阅读 · 0 评论 -
hdu1548 a strange lift
这道题可以用BFS来做,也可以用最短路算法来做,建好图就可以了。#include#includeint main(){ int a,B,i,n,u,v,j,min; int inf=99999999; int dis[220],b[220],e[220][220],k[220]; while(scanf("%d",&n),n!=0) {原创 2016-07-26 19:20:25 · 231 阅读 · 0 评论 -
poj3790 最短路径问题
最短路,用迪杰斯特拉算法做就行,不过要注意边的松弛条件,距离优先,先比较距离选择最小的,然后更新距离数组和价值数组,在距离相等的情况下再比较价值,选择价值最小的来更新;#include#include#includeint dis1[1100],dis[1100],e[1100][1100],bo[1100],e1[1100][1100];int inf=1e10;int main原创 2016-07-27 23:30:26 · 393 阅读 · 0 评论 -
HDU 3395 Special Fish(KM)
这是一道KM模板题,函数部分都是一样的,只是建图不同。这里的建图是如果01矩阵中数字是1的话,那么第i条鱼攻击第j条鱼时,所产生的鱼卵数是第i条鱼和第j条鱼的异或值;#include#include#include#include#include#define N 110using namespace std;int link[N],mat[N][N],vx[N],vy[N],原创 2016-07-31 10:14:32 · 320 阅读 · 0 评论 -
hdu1496 equation(较好的hash)
初一看四个变量,四重循环,暴力肯定会超时,这个时候可以将等式移项一下,得到如下式子;a*x1^2+b*x2^2=-c*x3^2-d*x4^2;这样一来,可以将左边的结果暴力枚举一下存在一个数组中,同时将右边的结果枚举一下,存在另一个数组,当两边结果相等时,用左边的方案数乘上右边的方案数就是最终的方案数;#include#include#include#include#inclu原创 2016-08-07 16:48:33 · 462 阅读 · 0 评论 -
hdu1425 排序+hash
从这道题学到了排序的一种新方法,当数据量非常大的时候就可以用哈希表这种方法来进行排序,类似于桶排序利用下标;这种排序方法时间复杂度是O(n);#include#include#include#include#include#include#define N 1000010int Hash[N];int main(){ int i,m,n,t; while(~原创 2016-08-07 17:16:10 · 234 阅读 · 0 评论 -
hdu3068 最长回文子串问题.
O(n)法求最长回文串,代码如下#include#include#includeint p[310000];char str[310000];int min(int a,int b){ return a<b?a:b;}int kp(int n){ int i; int max=0; int id,ans=1;; for(i=1;i<n;转载 2016-05-21 17:14:46 · 287 阅读 · 0 评论