上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 26 下一页
摘要: 同http://www.cnblogs.com/ziyi--caolu/p/3202511.html#include#include#include#includeusing namespace std;struct node{ int x1,y1,x2,y2;}s[1100];int dp[1100],vist[1100][1100],n;int dfs(int num){ if(dp[num]>0) return dp[num]; dp[num]=1; for(int i=1;idp[num]) dp[num]=tmp; } } return dp[num];}int main(){ 阅读全文
posted @ 2013-07-20 16:19 紫忆 阅读(405) 评论(0) 推荐(0) 编辑
摘要: http://acm.nyist.net/JudgeOnline/problem.php?pid=16题意:有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a#include#include#includeusing namespace std;#define maxx 10000000struct node{ int x,y;}s[1100];int vist[1100][1100],n,dp[1100];int cmp(const node a,const node b){ if(a.x0) return dp[num]; dp[nu 阅读全文
posted @ 2013-07-20 15:36 紫忆 阅读(1736) 评论(0) 推荐(0) 编辑
摘要: http://acm.nbut.cn/Problem/view.xhtml?id=1475题意:给出一个数,需要你统计在这个数范围内有多少个1........思路:从高位到低位计算,例如1312最高位==1,说明最高位为一个的数字1000——1312,有313种次高位==3>1,那么先思考它本身为1的情况,只有三位数的时候,范围为1——312,其中第三位为1的情况有100种,在这情况下,如果有四位数,1——1312,第三位为1的情况,应该是它只有3位数的时候为1的情况加上有四位数时为1的情况,那么应该是200种次低位==1,同样的它只有两位的时候本身为1的情况只有3种(10,11,12) 阅读全文
posted @ 2013-07-20 13:52 紫忆 阅读(435) 评论(0) 推荐(0) 编辑
摘要: #include#include#includeusing namespace std;typedef __int64 ss;#define max 55#define p 10000000ss n,m;ss dp[max][max][max],dist[max];int dfs(int a,int b,int c){ int sum=0; if(dp[a][b][c]) return dp[a][b][c]; if(a20||b>20||c>20) sum=dfs(20,20,20); else if(a0) { if(x==-1&&y==-1&& 阅读全文
posted @ 2013-07-19 11:27 紫忆 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 题意:给你n各点,m行关于这些点的联通关系,以及距离,求从1这个点到2这个点之间,下一个点到2这个点比当前点到2这个点的距离要小的路径的条数......思路:dj+记忆化搜索.......#include#include#includeusing namespace std;typedef __int64 ss;#define max 1010#define p 10000000ss a[max][max];ss n,m;ss dp[max],dist[max];void dj(ss n,ss v,ss v1){ ss i,j,k,min; ss s[max]; for(i=1;idist[i 阅读全文
posted @ 2013-07-19 10:17 紫忆 阅读(514) 评论(0) 推荐(0) 编辑
摘要: #include#include#include#includeusing namespace std;int n,m;int a[200][200],dp[200][200];int dfs(int x,int y){ int ans=0,sum=0; if(dp[x][y]) return dp[x][y]; sum=a[x][y]; for(int i=0;i0) { int xx=x+i; int yy=y+j; ... 阅读全文
posted @ 2013-07-18 17:58 紫忆 阅读(427) 评论(0) 推荐(0) 编辑
摘要: 用广搜实现的spfa,如果是用一般的最短路,会发现构图很麻烦,因为它不是路径带权值,而是自身带权值。写起来只要注意,在点出队列的生活将其标记为0,在要压入队列的时候,判断其标记是否为0,为0表示队列中木有这个点,则压入........还有一点,其实这个点即使在队列里面,只要是这个点有比当前的路径短的,就需要更新这个点的最短路,当然,这个点已经在队列里面了,我们就只需要更新它,而不需要把它加入队列......void dj(){ queueq; for(ss i=0;i=1&&xx=1&&yydis[tmp1.x][tmp1.y]+a[xx][yy]) { dis 阅读全文
posted @ 2013-07-18 15:54 紫忆 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 题意:“他考虑从A区域到B区域仅当存在一条从B到机房的路线比任何一条从A到机房的路线更近(否则可能永远都到不了机房了…”这句话一定要理解清楚。就是说,对于当前位置,如果下一个状态与终点的最短距离大于或者等于当前位置到终点的最短距离,那么这个下一个状态是不可取的!到此,就能明白,此题就是求出所有点与终点的最短距离,然后再从起点进行记忆化搜索。这道题目值得注意,它有用广搜的dj,很有用的一个东东......用广搜实现的dj,如果是用一般的dj,会发现构图很麻烦,因为它不是路径带权值,而是自身带权值。写起来只要注意,在点出队列的生活将其标记为0,在要压入队列的时候,判断其标记是否为0,为0表示队列中 阅读全文
posted @ 2013-07-18 15:52 紫忆 阅读(686) 评论(0) 推荐(0) 编辑
摘要: 题意:给出n*n的格子,每个各自里面有些食物,问一只老鼠每次走最多k步所能吃到的最多的食物这道题目,值得我记住它,re了n次,以前写搜索没有注意的一个小地方,导致re这么多次的ac代码:#include#include#includeusing namespace std;int dp[110][110],s[110][110];int n,k,t[4][2]={1,0,-1,0,0,1,0,-1};int dfs(int x,int y){ int maxx=0,xx,yy,ans; if(!dp[x][y]) { for(int i=1;i=0&&xx=0&... 阅读全文
posted @ 2013-07-18 10:53 紫忆 阅读(2422) 评论(2) 推荐(0) 编辑
摘要: 题意:给出一串长度为n的字符,再给出一个k值,要你求重复次数大于等于k次的最长子串长度........思路:其实也非常简单,直接求出height值,然后将它分组,二分答案......结果就出来了.......#include#include#include#includeusing namespace std;#define maxx 110000int wa[maxx],wb[maxx],wsf[maxx],wv[maxx];int sa[maxx],rank[maxx],s[maxx],height[maxx];struct node{ int num,x;}str[maxx];int c 阅读全文
posted @ 2013-07-17 15:21 紫忆 阅读(237) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 26 下一页