摘要: 题目链接题目大意:给出n个公寓的互相距离,选择在其中一个公寓楼下建食堂,要求食堂到最远的公寓的距离最短。使用floyd求最短路,最短距离存在dist[N][N]中,然后求每行的最大值,再在这些最大值中求最小值。View Code 1 #include <stdio.h> 2 #define MAX(a,b) ((a)>(b)?(a):(b)) 3 #define MIN(a,b) ((a)<(b)?(a):(b)) 4 #define INF 0x7ffffff 5 #define N 100 6 int dist[N][N]; 7 int main() 8 { 9 i 阅读全文
posted @ 2012-04-13 10:30 BeatLJ 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 题目链接经典贪心算法题。题目大意,给定一个整数N(位数最多2000)和整数k,在N中删除k个数使得剩下的数组成的整数最小。需要注意的是结果不要输出前导0。贪心策略为:从高位到低位扫描,若存在递减区间,则将高位删除以消除递减区间,否则从低位删。具体操作时,可以设一个栈来保存从高位起还没删的数。不难发现最后的结果一定是一个不下降序列,由此可以想到用二分来优化。View Code 1 #include <stdio.h> 2 #include <string.h> 3 #define MIN(a,b) ((a)<(b)?(a):(b)) 4 #define N 2005 阅读全文
posted @ 2012-04-13 10:07 BeatLJ 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 题目链接题目大意,给定一个整数表达式A1/A2/A3/.../An,('/'为除号1<=n<=10000,1<=Ai<=1000000000),问是否能通过添加括号使得表达式的值为整数。咋一看似乎没思路,但仔细想,不难发现这里存在最优策略,最优策略是用一个括号将表达式变成A1/(A2/A3/.../An)。证明如下:n为1时,直接输出"YES",n大于1时,首先,A2一定为分母,无论如何添加括号都无法改变这个事实,其次,按照上面的策略加括号后,只有A2为分母,所以这是个最优策略。有了最优策略后,我们需要做的就是不断约分(求最大公约数) 阅读全文
posted @ 2012-04-13 09:51 BeatLJ 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 最基础的最小生成树,简单题。View Code 1 #include <stdio.h> 2 #include <math.h> 3 #include <stdlib.h> 4 #define D(x1,y1,x2,y2) (sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))) 5 #define N 100 6 #define M 5000 7 struct node 8 { 9 int a,b;10 double d;11 }edge[M];12 int n,m;13 double x[N],y[N];14 int p[M];15 阅读全文
posted @ 2012-04-12 22:59 BeatLJ 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 用floyd求最短路,难得的一次ACView Code 1 #include <stdio.h> 2 #define MIN(a,b) ((a)<(b)?(a):(b)) 3 #define N 20 4 #define INF 0x7fffff 5 int dist[N][N]; 6 int main() 7 { 8 int i,j,k,x,kase=0; 9 while(1)10 {11 for(i=0;i<N;i++)12 for(j=i+1;j<N;j++) dist[i][j]=dist[j][i]=INF;13... 阅读全文
posted @ 2012-04-12 22:21 BeatLJ 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 题目链接题目大意是给定一个有向图,求最少需添加多少条有向边使得原图强连通。可以先求强连通分量,统计缩点后的图中入度为0的点和出度为0的点,答案就是两者中的较大者,需要注意的是当原图是强连通时,直接输出0。因为没有初始化WA了一次。#include <stdio.h>#include <string.h>#define CLR(a) (memset(a,0,sizeof(a)))#define N 100char g[N][N],vis[N];int n;int ord[N],id[N],cnt,din[N],dout[N];void dfs(int u){ int v; 阅读全文
posted @ 2012-04-10 22:12 BeatLJ 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 题目链接由于之前没写过网络流方面的题目,所以第一次写的时候居然想到用动态规划去做(在没有环的情况下貌似可以,有环会RE)。现在看来,这题是个求最小割的题,因为最大流量最小割相等,所以也就是求最大流量。容量网络也很明显。我用的是标号法(Edmonds-Karp算法)。#include <stdio.h>#include <string.h>#define N 152#define INF 0x7fffffff#define MIN(a,b) ((a)<(b)?(a):(b))int c[N][N],flow[N][N],a[N],p[N],f,n,m;int que 阅读全文
posted @ 2012-04-09 23:20 BeatLJ 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 题目链接并查集的题。一开始的时候没看懂题,以为要用最短路算法去做,结果样例都没过,后在队友的指导下终于理解了题意。用并查集写好后,第一次提交莫名奇妙的RE,检查后发现查函数没写返回值(编译器没提示呢?而且样例也过了),第二次提交是WA,经检查后发现是无穷大设得不够大。下次一定要注意这些细节问题。#include <stdio.h>#define N 10005#define INF 0x7fffffffint p[N],d[N],out[N],n;void make_set(){ int i; for(i=0;i<=n;i++) p[i]=i,d[i]=0,out[i]=0; 阅读全文
posted @ 2012-04-08 20:23 BeatLJ 阅读(363) 评论(0) 推荐(0) 编辑
摘要: 题目链接动态规划题,LCS的变形。无语了,写错两个字母,WA了3次啊!#include <stdio.h>#include <string.h>#define MAX(a,b) ((a)>(b)?(a):(b))#define N 105int m[5][5]={ 5,-1,-2,-1,-3, -1,5,-3,-2,-4, -2,-3,5,-2,-2, -1,-2,-2,5,-1, -3,-4,-2,-1,-10000};char a[N],b[N],vis[N][N],la,lb;int c[N][N];int f(int x,int y){ int i,... 阅读全文
posted @ 2012-04-07 23:32 BeatLJ 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 题目链接题目大意,给定一个字符串,求至少需插入多少字符使其变成回文。动态规划题。#include <stdio.h>#include <memory.h>#include <string.h> #define MIN(a,b) ((a)<(b)?(a):(b)) #define N 5001 char s[N]; int c[N]; int main() { int i,j,n,a,b; while(scanf("%d",&n)!=EOF){ getchar(); gets(s); for(i=n-2;i>=0;i-- 阅读全文
posted @ 2012-04-07 20:11 BeatLJ 阅读(264) 评论(0) 推荐(0) 编辑