摘要:
怎么讲。。纯水题吧,随便搜一下就可以了。 不过搜法也有很多,我第一次写的是直接求距离,因为要开平方,又是O(n^2)的复杂度,所以没超时。但是最后一个数据293ms,有点危险,看了下题解,有好方法,直接使用x^2+y^2,不开平方,毕竟就是比较距离嘛! 写出来的那个代码全部WA了,不知道怎么回事,好困了,明天继续写。——2011年7月6日 22:53:12 也不知道怎么回事,重写一次就直接AC。 有点无语的说,上代码:#include <stdio.h>#include <stdlib.h>struct dot{ int x, y;}dot[2000];double g 阅读全文
摘要:
USACO原题,做过几次了,所以一次AC,就是暴搜,因为数据小。 先把每个牧区的直径求出来,然后再把在一个牧区中距离任意节点的最远距离算出来,然后暴搜,若i,j之间加一条路,那么新牧区的半径要么就是i所在的牧区的的直径,要么是j所在的牧区的直径,要么就是i所在的牧区中距i最远的距离加上j所在的牧区中距j最远的距离加上i,j之间的距离。 看代码最有效:#include <math.h>#include <stdio.h>#include <stdlib.h>#define INF 100000000struct dot{ int x, y;}dot[150]; 阅读全文
摘要:
刚接手真的好难,因为是MOD100啊,本来可能很大了,结果MOD一下就变成0了,一个很小的值就是最佳答案了。 对此,解决方法是用f[a][b][i]来代表第a行第b列能否产生出值为i的路径,如果能则为1,不能则为0。网上有一个人给它取名我挺喜欢,叫做布尔染色。然后方程就是f[a][b][i] = max(f[a + 1][b + 1][(100 + i - num[a][b]) % 100] +f[a + 1][b][(100 + i - num[a][b]) % 100]),我代码的DP和这个不一样,因为代码比理论感觉简单一点,不废话了,上代码: Ps: 最近比较喜欢用函数来写DP,然后用. 阅读全文
摘要:
真的好悲催,不知道是手生了还是蠢了,查了好久发现问题出在宏上面把变量名写错了。 这题比较简单吧,就是一个模拟,或者说BFS,广搜。。代码:#include <stdio.h>#include <assert.h>#include <stdlib.h>#define MAX 50000char map[150][151];struct { int x, y;}queue[MAX];int start, end;int cost[150][150];int used[150][150];void enqueue(int a, int b){ int t = (e 阅读全文
摘要:
DP,最近做TYVJ感觉挺有效果的,比较难得先跳过,前期先练手感,把手感练好了,再慢慢提升难度。 题目比较简单,调试了好一阵,提交了几次,羞愧。。代码:#include <stdio.h>#include <stdlib.h>unsigned num[30], f[30][30];int p[30][30];unsigned ans(int s, int t){ int i; unsigned a = 0, b; if(s == t){ return num[s]; } if(s > t){ return 1; } if(f[s][t]){ return f[s] 阅读全文
摘要:
呼,写死我了,最开始写的DP,没太仔细想,结果!!超时,超得真过瘾啊!呵呵,后来知道该用贪心,就是相当于一个”赫夫曼树“,当然,我没用那算法,也不记得那算法了,用的堆,不过也好久没写了,提交至少5次,最后发现主要的问题是出在一个寻找父节点的那个宏上。手生了,联系了一下堆。#include <stdio.h>#include <stdlib.h>int heap[10001];int len, ans;#define left(i) (((i) << 1) + 1)#define right(i) (((i) << 1) + 2)//把parent 阅读全文