06 2012 档案

摘要:题意:有n 个小巫师,还有 m 个小精灵 ,还有 K 个大树,巫师可以用 霜冻新星杀死小精灵,但是每使用一次都有一定 的技能冷却时间,而且小精灵必须在攻击范围内。分析: 二分答案,即枚举符合条件的时间,满足所有小精灵被KO,由于每个巫师能够杀死多个小精灵,所以可以用到二分 图多重匹配,如果所有小精灵都找到匹配,那么该时间符合, 最麻烦的是建图,两个人之间必须不能有树阻挡,在 计算两个人所在线段与 树相交的时候 可以先计算点(树的坐标)到线段(巫师与小精灵连线)的最短距离,如果该 距离小于树的半径,那么该巫师和小精灵能够形成匹配。View Code #include<stdio.h> 阅读全文
posted @ 2012-06-25 15:19 'wind 阅读(253) 评论(0) 推荐(0)
摘要:题意: 给出一个地图,起点 s,终点 t,和一个数 x,求出s到 t的最短路,且经过的路的条数是 x 的倍数。分析: 可以看成是二维的最短路,在 原dijkstra的基础上修改,从一个点到另一个点走的边数如果是 d, 那么从这个点到另一个点走的边数为 d+1, 只要对 X 取模,便能求出从 s 到 t 经过 x 的倍 数边的最短路径。#include<stdio.h>#include<string.h>const long long INF=9999999999;long long g[102][102];long long d[102][11];int v[102][ 阅读全文
posted @ 2012-06-23 08:10 'wind 阅读(294) 评论(0) 推荐(0)
摘要:题意: 给 n 给任务,每个任务对应相应的截至时间和价值,总时间为 m ,每个任务消耗的时间为 1,问如何分配工作顺序可以得到最大价值。分析: 对任务按截至时间从大到小排序,从时间 t 开始,找到在符合时间 t 的最大价值的任务,然后 t--.View Code #include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>using namespace std;struct node{ int ti,va; const bool operator <(const s 阅读全文
posted @ 2012-06-22 21:52 'wind 阅读(225) 评论(0) 推荐(0)
摘要:题意: 给一个固定大小的布料,给出n 个固定的尺寸,每个尺寸的布料对应一定的价值,问如何裁剪原来的布料能可以获得最大的价值。分析: 应为每个尺寸的布料都对应四种切法,(蓝色部分) 所以状态转移方程为: dp[i][j]=max(dp[i][j],max(d[i-ll][j]+d[ll][j-ww],d[i][j-ww]+d[i-ll][ww])+p); dp[i][j]=max(dp[i][j],max(d[i-ww][j]+d[ww][j-ll],d[i][j-ll]+d[i-ww][ll])+p);View Code #include<stdio.h>#include<s 阅读全文
posted @ 2012-06-16 16:37 'wind 阅读(229) 评论(0) 推荐(0)
摘要:题意: 有 n 个国家,n-1 条道路,形成的树形地图,问图中有多少对城市距离为 K ...分析: 可以用 f[i][j] 表示以 I 为根的子树中有多少定点距离 i 为 j 。因为 f[i][j]=f[son1][j-1]+f[son2][j-1]....f[son(n)][j-1] 即每个 I 号根都可以由和它直接相连的孩子得到,这个过程可以利用树形搜索的方式来完成, 至于最终答案,只要逐个累加即可,例如 f[i][j] i 号节点得到的数目为 f[i][k]+f[son1][j]*f[son2][k-2-j] (son为i 的直接孩子)View Code #include<s... 阅读全文
posted @ 2012-06-08 01:31 'wind 阅读(227) 评论(0) 推荐(0)
摘要:题意: 给一个n*m的方格,里面放着横竖的单词,问从里面最多可以选出多少组单词并使他们互不冲突。分析: 二分图最大独立权集,求出最大匹配数,总结点数减去最大匹配即为答案。View Code #include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeof(x))char map[2002][2002];int a[2002][2002];int link[505];int v[505];struct node{ int to,next;}q[1000000];int head[2002];int tot 阅读全文
posted @ 2012-06-06 23:57 'wind 阅读(205) 评论(0) 推荐(0)
摘要:题意: 给一串字符,有三种操作'<' '>' '-' 表示左移,右移,删除,要求输出最后结果。分析: 建立双向链表模拟之...第一个用双向链表做的题,wa了N次。。。--!View Code #include<stdio.h>#include<string.h>#include<stdlib.h>struct node{ node *next; node *pre; char c;};char s[1000005];node *a[1000005];int main(){ int n; int to 阅读全文
posted @ 2012-06-06 23:16 'wind 阅读(224) 评论(0) 推荐(0)
摘要:题意: 有 n 个萝莉,和 m 个怪叔叔,已知他们的坐标,且任意三个人不共线,要求从萝莉中任选三个人出来,且三个人 组成的三角形中不能包含怪叔叔,共有多少种取法。分析: 将萝莉的坐标按横坐标排序,用 f[i][j] 表示萝莉 i 到萝莉 j 的横坐标范围内,位于萝莉 i ,j上方的 怪叔叔数量,对于横坐标依次增加的 萝莉 i,j,k ,如果有 f[i][j]+f[j][k]=f[i][k], 则 萝莉 i,j,k 组成的三角形内不含有怪叔叔(画图能够看出)。 时间复杂度为 O(N^3)。View Code #include<stdio.h>#include<string.h& 阅读全文
posted @ 2012-06-05 23:31 'wind 阅读(210) 评论(0) 推荐(0)
摘要:题意: 给一个起点和一个终点,然后给出 N 个互不相交的栅栏,问从起点到终点如果不穿过栅栏(可以接触)最少需要走多 远的距离。分析: 如果两个点所在线段,没有其它线段与之相交,则可以在两点之间连一条线段,最后只要求出起点到终点的最短距离即可, 时间复杂度O(N^3)CODE :View Code #include<stdio.h>#include<string.h>#include<math.h>double min(double a,double b){ return a<b?a:b; }double max(double a,double b){ 阅读全文
posted @ 2012-06-04 20:47 'wind 阅读(194) 评论(0) 推荐(0)