hdu
文章平均质量分 57
turbo_7
无聊等于慢性自杀
展开
-
hdu4159 郑厂长系列故事——体检
#include #include #include using namespace std; int main(){ int t,k,m,n; scanf("%d",&t); while(t--){ scanf("%d%d%d",&k,&m,&n); if(k<=n){ printf("%d\n",m);原创 2013-05-19 01:03:42 · 554 阅读 · 0 评论 -
hdu2112 HDU Today
map好像挺慢的 #include #include #include #include #define INF 0x3f3f3f3f using namespace std; int dis[155][155],cost[155]; bool vis[155]; maplist; void dijkstra(int s,int t,int len){ int i,j,mini; int p原创 2013-06-01 20:30:50 · 416 阅读 · 0 评论 -
hdu3790 最短路径问题
这道题值得一做,每条边有两个费用,第二个费用从属于第一个费用 #include #include #include #define INF 0x3f3f3f3f using namespace std; int dis[1005][1005],dis1[1005][1005]; int cost[1005],cost1[1005]; bool vis[1005]; int n,m; void d原创 2013-06-01 20:37:20 · 491 阅读 · 0 评论 -
hdu2680 Choose the best route
起点有多个,处理方法就是再设置一个起点a作为真正的起点,然后a到那多个起点的距离设置成0,这样那多个起点被当做中间节点来处理,便可以直接使用dijkstra了 #include #include #include #define INF 0x3f3f3f3f using namespace std; int n,m,s; int dis[1005][1005],cost[1005]; bool原创 2013-06-01 20:43:48 · 421 阅读 · 0 评论 -
hdu3415 Max Sum of Max-K-sub-sequence
我的第一道单调队列题目,之前有看过这道题的题解,并简单了解了单调队列,本以为自己能独立写出来,战战兢兢写完,一调试果然是错的,找到了原因还是不知道该如何解决,无奈再看题解,队列里存的是数组下标,我存的是元素自身,这样就不能维护子序列的长度,显然是错的。 总结:菜鸟智力是硬伤,还有很长的路要走。 #include #include #include using namespace std; in原创 2013-06-06 23:43:31 · 613 阅读 · 0 评论 -
hdu3555 Bomb 数位DP
数位DP初学者,代码就是网上千篇一律,相似度极高的数位DP代码 一个不错的题解http://www.cnblogs.com/luyi0619/archive/2011/04/29/2033117.html #include #include #include #define llong long long using namespace std; llong dp[20][3]; int原创 2013-06-03 22:35:34 · 537 阅读 · 0 评论 -
hdu2844 Coins
在discuss里看到的这个方法,不需要二进制优化,也不需要单调队列优化,仅需增加一个数组记录每个coin使用的个数,既好写有好理解,话说那个高端大气的单调队列优化各种复杂抽象难以理解,膜拜ing。 #include #include #include using namespace std; int n,m; int a[105],c[105],used[100010]; bool f[1原创 2013-06-07 10:42:44 · 533 阅读 · 0 评论 -
hdu2078
看完题就往类背包DP上想了,看了discuss才意识到这题根本没那么麻烦 #include #include using namespace std; int main(){ int t; int n,m; int a; scanf("%d",&t); while(t--){ int minn=105; scanf("%d%原创 2013-08-07 15:08:12 · 730 阅读 · 0 评论 -
hdu4705 Y
非连通组合个数=所有组合-连通组合个数 树形DP,根结点表示三个连通组合数的中间那个数#include #include #include using namespace std; #define M 100010 #pragma comment(linker, "/STACK:16777216") struct node{ int v,next; }edge[M*2]; int hea原创 2013-09-07 20:26:45 · 748 阅读 · 0 评论 -
hdu2196 Computer
求树的所有结点的最长直径#include #include #include using namespace std; #define M 10010 int len[M],len2[M],leaf[M],leaf2[M],head[M]; int n,tot; struct node{ int to,dis,next; }edge[M*2]; void insert(int u,int原创 2013-09-07 20:00:00 · 619 阅读 · 0 评论 -
hdu4514 湫湫系列故事——设计风景线
求树的最长直径,之前做过hdu2196,套用那道题的思路,两次dfs,求出每个结点的最长直径,然后找出最大的即为整棵树的最长直径#pragma comment(linker, "/STACK:102400000,102400000") #include #include #include #define M 100010 #define ME 1000010 using namespace std原创 2013-09-07 19:46:30 · 754 阅读 · 0 评论 -
hdu1561 The more, The Better hdu1011 Starship Troopers
两道相似的树形dp+有依赖的的背包,有依赖的背包的多层依赖关系可以用树表示出来,所以以后遇到多层依赖关系的背包可以考虑将依赖关系表示成一棵树,然后树形DP求解,有依赖的背包的求解使用到分组背包思想,详见背包九讲相关专题#include #include #include #define M 210 using namespace std; int n,m; int head[M]; struct原创 2013-09-07 20:09:16 · 567 阅读 · 0 评论 -
poj2181 hdu2713 Jumping Cows
#include #include using namespace std; int n,a,f[150005][2]; int main(){ int i,j; while(scanf("%d",&n)!=EOF){ memset(f,0,sizeof(f)); scanf("%d",&f[1][1]); for(i=2;i<=n;i++){ scanf("%d",&a);原创 2013-05-01 15:12:24 · 423 阅读 · 0 评论 -
hdu4545 魔法串
没有使用LCS,画蛇添足了一步导致找了一晚上错误,难道我的RP又欠费了? #include #include #include using namespace std; int main(){ char s1[1005],s2[1005]; bool map[30][30]; int t,m; int len1,len2; char t1[3],t2[3]; int i,j,icas原创 2013-06-01 18:35:32 · 455 阅读 · 0 评论 -
hdu1518 Square
#include #include #include #include using namespace std; bool used[30]; int a[30]; int m,len; bool dfs(int isin,int cur,int k){ if(isin==3) return 1; int i; for(i=k;i>=1;i--){ if(used[i]==1) cont原创 2013-05-29 19:14:02 · 478 阅读 · 0 评论 -
hdu1232 畅通工程
#include #include int father[1001]; int n,m; int find(int c){ if(father[c]!=c) father[c]=find(father[c]); return father[c]; } void uun(int a,int b){ int aa=find(a); int bb=find原创 2013-05-19 01:16:02 · 431 阅读 · 0 评论 -
hdu4512 吉哥系列故事——完美队形I
准备知识:最长公共上升子序列 http://www.clarkok.com/blog/?p=353 #include #include #include using namespace std; int main(){ int a[210],f[210]; int t,n; int i,j,k,ans; scanf("%d",&t); while(t--){ memset(f,0,原创 2013-05-21 20:05:30 · 461 阅读 · 0 评论 -
hdu2222 Keywords Search
AC自动机模板题 #include #include #include using namespace std; struct node{ node *fail; node *next[26]; int count; }*q[500001]; char keyword[51]; char str[1000001]; int head,tail; void insert(char str[]原创 2013-05-22 19:34:37 · 514 阅读 · 0 评论 -
hdu1272 小希的迷宫 hdu1856 More is better
之所以把这两题放一块看是因为寻找祖先结点是有区别的,不然一个爆栈,一个TLE hdu1272 小希的迷宫 #include #include #include using namespace std; int root[100001],foot[100001]; int find(int t){ //不能用递归寻找祖先借点,不然会爆栈,汗 while(root[t]!=t)原创 2013-05-18 01:47:07 · 499 阅读 · 0 评论 -
hdu3172 Virtual Friends
并查集题目 用map映射的代码跑了1100多ms,而采用trie树保存人名的代码仅跑了203ms。 采用map映射 #include #include #include #include using namespace std; int root[10010],sign[10010]; maplist; int find(int c){ if(root[c]!=c) root[c]=f原创 2013-05-13 20:29:55 · 474 阅读 · 0 评论 -
hdu3068 最长回文 poj3974 Palindrome(Manacher算法)
#include #include #include #include using namespace std; char a[110005],str[220010]; int p[220010]; int cnt; void Manacher(){ int i,mx=0,id; for(i=1;i<cnt;i++){ if(mx>i) p[i]=min(p[2*i原创 2013-05-21 23:56:52 · 610 阅读 · 0 评论 -
hdu4513 吉哥系列故事——完美队形II
终于AC了,最长回文串的变形 #include #include #include using namespace std; int a[200010]; int p[200010]; int cnt; int manacher(){ int i,mx=0,id,ans=-1; for(i=1;i<=cnt;i++){ if(mx>i) p原创 2013-05-24 00:35:55 · 1330 阅读 · 0 评论 -
hdu1829 A Bug's Life
#include #include #include using namespace std; int father[2001]; bool relative[2001]; int find_root(int c){ if(father[c]!=c){ int ori=father[c]; father[c]=find_root(father[c]); relative[c]=(re原创 2013-05-10 19:11:57 · 504 阅读 · 0 评论 -
hdu2159 FATE
初看是背包问题,但没有往二位费用背包上想。对于最多的杀怪数为k的条件尝试增加一维,dp[i][j]中j表示已杀的怪的数目,得到状态转移方程dp[i][j]=max(dp[i][j],dp[i-1][j-b]+a),每种怪的数目不限,对于第一维[i]是完全背包问题,采用完全背包的顺序循环方式,这样看状态转移方程第二维[j]似乎不是表示已杀的怪的数目,思路在这被卡住了。翻看了一下背包九讲找到了这个问题原创 2013-05-11 17:14:13 · 506 阅读 · 0 评论 -
hdu4427 Math Magic
#include #include #include using namespace std; const int MOD=1000000007; int dp[2][1010][1010]; int num[1000],LCM[1010][1010]; int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b); } in原创 2013-05-13 20:56:25 · 795 阅读 · 0 评论 -
poj1251 hdu 1301 Jungle Roads
#include #include #include using namespace std; int dis[28][28]; int cost[28]; int n; int prim(int s){ int i,j; for(i=0;i<n;i++) cost[i]=dis[s][i]; cost[s]=-1; int sum=0; int mini; for(i=0;i<n原创 2013-05-29 10:25:22 · 499 阅读 · 0 评论 -
hdu 4739 Zhuge Liang's Mines
#include #include #include #include #include using namespace std; struct node{ int x,y; }a[22]; vector mine; int dp[(1<<20)+2]; int n; bool cmp(node a,node b){ if(a.x==b.x) return a.y原创 2014-04-21 18:30:20 · 563 阅读 · 0 评论