自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

GoldMoon

记录成长点滴

  • 博客(22)
  • 收藏
  • 关注

原创 HDOJ2923Einbahnstrasse(Map+Floyd)

题意:给定n个城市,c个目的地(可能有重合的),r条有向边。接下来是出发点,然后是c个目的地。接下来r行是路径的信息,箭头代表方向。求每次从出发点出发到达目的地,然后再回到起点。走c个来回的最短路之和。做法:用Map对地方进行影身,用Floyd求最短路。刚刚发现map的key为string时,用char数组也是可以的。注意大的数组最好开成全局变量,放在函数里

2015-05-24 17:19:34 431

原创 HDOJ-2680Choose the best route(Dijkstra)

多起点单终点的Dijkstra,不过和一个起点的没有区别,也不用以每个起点为源点做Dijkstra,加一个虚拟的节点1,连接所有起点,路径长度为0,从这个虚拟的1节点做就好了。如果有多个终点的话也同理,加入一个虚拟的“总”终点。另外注意此题为单向边。#include#includeusing namespace std;const int inf=0x3F3F3F3;const

2015-05-22 16:26:23 332

原创 HDOJ3339(最短路+01背包)

题意:给出电站之间的路径长度和每个电站的电量,需要派出坦卡去攻占电站,以控制多一半的电量(要比一半多,因为这个WA了一次),问最少走多少路径,坦克数量足够多,一个坦克只能控制一个电站。思路:用Floyd求出起点(0点)到所有电站的距离,当做背包物品的价值,然后以每个电站的发电量作为背包物品的容量,进行01背包。然后找出背包容量在sumpow/2+1到10000(最大电量之和)的最小

2015-05-22 11:17:26 629

原创 HDOJ-3790最短路径问题(Dijkstra)

多关键字的的最短路问题,把比较部分改一下就好了。#include#includeusing namespace std;const int inf=0x3F3F3F3;const int N=1100;struct data{ int d; int c;};int vis[N];data f[N][N],dist[N];int n,m,t,s,d;

2015-05-21 21:05:37 316

原创 HDOJ-2112HDU Today(Floyd+MAP)

坑点:1、要按双向边做2、要记得处理出发点和终点相同的情况,直接输出0#include #include #include #include #include #include #include using namespace std;const int MAXN=162;const int INF=0x3F3F3F3F;void work(int t

2015-05-21 19:55:05 259

原创 HDOJ-2544最短路

不能再直白的题了:#include#includeusing namespace std;const int inf=0x3F3F3F3;const int N=105;int f[N][N],dist[N],vis[N];int n,m;int min(int x,int y){ return x<y?x:y;}void Dijkstra(int u)

2015-05-21 18:58:53 339

原创 HDOJ-1385Minimum Transport Cost(记录路径且有点权的FLOYD)

题意:给出一个图的邻接矩阵,即任意两点之间的边权,再给出给个点的权值。再询问两个点之间的最短路(路径上除了始点和终点之外的点权+边权),并输出最短路路径,若有多条最短路,输出字典序小的。解法:主体还是Floyd,关于点权的处理,更新时的条件变为:f[i][j]=min(f[i][k]+f[k][j]+d[k])。关于路径的记录,用path[i][j]表示从点i到点j的最短路上,从i点出

2015-05-19 16:56:23 280

原创 HDOJ-1869六度分离(FLOYD)

FLOYD,直接认识的两个人距离设为1,判断是否存在两个人之间的最短距离大于7的情况。#include #include #include void work(int n,int m){ int f[105][105]; int i,j,k,x,y,flag; memset(f,0x3F,sizeof(f)); for(i=0;i<=n;i++) f

2015-05-19 15:59:17 553

原创 HDOJ-1847畅通工程续(Floyd)

裸的算法:#include #include #include using namespace std;const int N=205;constint min(int x,int y){ return x<y?x:y;}void work(int n,int m){ int i,j,k,a,b,x,s,t; int f[N][N];

2015-05-16 16:55:22 740

原创 HDOJ-2066一个人的旅行

另源点为家,家到与其相连的城市的距离为0,再做一遍Dijkstra,找出最小值即可。另外,城市数量不超过1100个。代码:#include#includeusing namespace std;const int inf=0x3F3F3F3;const int N=1100;int f[N][N],dist[N],vis[N];int n,t,s,d;int mi

2015-05-16 16:30:34 377

原创 HDOJ-1217Arbitrage(FLOYD最短路)

题意:给定n中货币和m种兑换汇率,问有没有可能套汇。思路:以汇率的乘积作为路径的长(通常是加的,但这里需要乘),若某种货币经过一个环之后,自身到自身的路径权值>1,则可判断能够进行套汇。至于字符串和编号的转换,直接用map就好了。代码:#include #include #include #include #include #include #include

2015-05-16 14:50:32 374

原创 HDOJ-1247Hat’s Words(Trie)

#include #include #include #include #include #include #define MAXN 26using namespace std;typedef struct Trie{ int next[MAXN]; int cnt; bool tail;};Trie f[250000];string

2015-05-12 16:28:21 271

原创 HDOJ-3460Ancient Printer(Trie)

思路:把所有单词插入到Trie树中,ans=2*树的节点数-最长的队名的长度(除了最长的队名,其它队名都要打一次删除一次)+n(把n个队名打印出来)。其实找到规律后Trie树也是多余的,大家可以参考下kuangbin大神的blog:http://www.cnblogs.com/kuangbin/archive/2011/08/08/2130824.html自己的代码:#include

2015-05-10 13:43:44 347

原创 HDOJ-1075What Are You Talking About(Trie/Map)

虽然是Trie专题里面的,不过完全可以用MAP写,于是就用MAP写了一发。自己的字符串处理还是不行,写得太烂了。#include #include #include #include #include #include using namespace std;int main(){ map f; string str1,str2; char s[10

2015-05-10 12:47:39 403

原创 HDOJ-2072单词数(Trie树/MAP)

Trie树专题,就不用MAP写了。一开始WA了几次,是因为”asdf as a“这种情况处理错了,一个单词插入完毕后,要判断最后一个字母所在位置是否为已经存在的单词的结尾。#include #include #include #include #include #define MAXN 26using namespace std;typedef struct Trie{

2015-05-09 16:04:49 342

原创 HDOJ-1671Phone List(Trie树)

Trie树判断是否存在某个字符串为另外一个字符串的前缀。和HDOJ1305一样。一开始忘记再work里加初始化。#include #include #include #define MAXN 10typedef struct Trie{ int next[MAXN]; int cnt; bool tail;};Trie f[500000];int

2015-05-09 15:19:55 522

原创 HDOJ-1521统计难题(Trie树)

模板题,Trie树入门,慢慢熟悉一下吧。这次比上次成熟一点了。#include #include #include #define MAXN 26typedef struct Trie{ int next[MAXN]; int cnt;};Trie f[500000];int tot;void TrieInit(){ int i;

2015-05-09 15:02:32 648

原创 HDOJ-1305Immediate Decodability(Trie树入门)

题意:给定一些01序列,判断是否存在某个序列是另外一个序列的前缀。第一次写字母树,没用动态分配内存,代码还需完善。注意判断在插入序列的时候既要判断当前序列是否为已经存在序列的前缀又要判断已经存在的序列是否为当前序列的前缀。再写几道题,总结出一个自己的模板吧。/*静态内存分配的字典树*/#include #include #include #define MAXN 2

2015-05-09 14:17:07 604

原创 HDOJ-5211Mutiple(模拟)

某场BC的第二题,当时做的很糟糕。现在想想其实很简单,看来当时是糊涂了。题意:问题描述wld有一个序列a[1..n], 对于每个1≤in, 他希望你求出一个最小的j(以后用记号F(i)表示),满足ij≤n, 使aj为ai的倍数(即aj mod ai=0),若不存在这样的j,那么此时令F(i) = 0保证1≤n≤10000,1≤ai≤10000 对于任意 1≤i≤n, 且对于任

2015-05-09 12:33:06 303

原创 HDOJ1059-Dividing(DP)

仍然是多重背包,判断能否恰好装满总值的一半即可。自己写的代码太烂,跑了700ms。本题当然也可以用母函数来写。#include #include #include using namespace std;const int maxm=60005;int f[maxm];int s[10];int max(int x,int y){ return x>y?x:y

2015-05-06 17:22:55 410

原创 HDOJ2844-Coins(DP)

题意:你有n种面值的硬币,告诉你每种硬币的数量,问这些硬币能拼成多少不超过m的面额。思路:多重背包。当某种硬币的总额大于背包容量时进行完全背包,否则进行二进制拆分进行01背包。最后统计f[i]==i的数量,即恰好能凑出金额为i的情况总数。详解请参考背包九讲。代码如下:#include #include #include using namespace std;int f[

2015-05-05 20:39:14 345

原创 HDOJ1069-Monkey and Banana(DP)

题意:给n中 x*y*z的盒子,不指定长宽高,每种盒子的数量不限,问最多能摞多高。限制条件:下面盒子的长宽必须比上面盒子的长宽都要大。思路:每种盒子可以有三种摆放方法(x、y、z分别当高),把每种盒子具体成三只盒子。按照底面积由大到小排序,再DP找出一个严格下降的子序列,不断更新高度即可。#include#include#includeusing namespace std;

2015-05-05 19:28:35 770

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除