2012年7月31日
摘要: 这题是讲有N个城市,每个城市都有魅力值,求能直飞到达各地最终返回目的地的最大魅力值。可以很容易想到转移方程:dp[i]=max(dp[j])+mi[i];代码:View Code 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int mi[105],dp[105],ans[105],f[105]; 6 bool map[105][105]; 7 8 int main() 9 {10 int ca,n,m;11 int i,j,x,y,p=1;12 cin>>ca;13 . 阅读全文
posted @ 2012-07-31 10:58 xinmenghuairi 阅读(283) 评论(0) 推荐(0) 编辑
  2012年7月30日
摘要: 找一串字符中完全匹配的起始位置,利用KMP模版:代码:View Code 1 #include<iostream> 2 using namespace std; 3 int p[10001]; 4 int a[1000001],b[10001]; 5 int n,m; 6 void getp() 7 { 8 p[1]=0; 9 int i,j=0;10 for(i=2;i<=m;i++)11 {12 while(j>0 && b[j+1]!=b[i]) 13 j=p[j];14 if(b[j+1]==b[i... 阅读全文
posted @ 2012-07-30 10:56 xinmenghuairi 阅读(235) 评论(0) 推荐(0) 编辑
  2012年7月28日
摘要: 即利用并查集:代码:#include<iostream>using namespace std;int bin[1001];int find(int x){ int r=x; while(r!=bin[r]) { r=bin[r]; } return r;}void memge(int x,int y){ x=find(x); y=find(y); if(x!=y) bin[x]=y;}int main(){ int n,m,x,y; int i,count; while(cin>>n&& n) {... 阅读全文
posted @ 2012-07-28 10:00 xinmenghuairi 阅读(202) 评论(0) 推荐(0) 编辑
  2012年7月26日
摘要: 题意就是讲在方格图中找到每个碉堡间都不相互破坏的最多碉堡存放数:代码:#include<iostream>using namespace std;char map[4][4];int ibest,n;bool panduan(int c,int r){ int i; for(i=c-1;i>=0;i--) { if(map[i][r]=='o') return false; if(map[i][r]=='X') break; } for(i=r-1;i>=0;i--) { ... 阅读全文
posted @ 2012-07-26 10:23 xinmenghuairi 阅读(329) 评论(0) 推荐(0) 编辑
  2012年7月21日
摘要: 百度百科资料: 简介 中文:卡特兰数 Catalan数是组合数学中一个常出现在各种计数问题中出现的数列。由以比利时的数学家 欧仁·查理·卡塔兰(1814–1894)命名。 原理: 令h(0)=1,h(1)=1,catalan数满足递归式: h(n)=h(0)*h(n-1)+h(1)*h(n-2)++h(n-1)h(0)(其中n>=2) 该递推关系的解为: h(n)=C(2n,n)/(n+1)(n=1,2,3,)另类递归式: h(n)=((4*n-2)/(n+1))*h(n-1); 前几项为(OEIS中的数列A000108):1,1,2,5,14,42,132,429, 阅读全文
posted @ 2012-07-21 10:07 xinmenghuairi 阅读(541) 评论(0) 推荐(0) 编辑
  2012年7月20日
摘要: 这个题主要是要记得用long long 来存运算结果的。。。还有就是如果N比M大的话只要算到M阶就可以了。。。我的代码:(有点乱的)#include<iostream>#include<string>using namespace std;int main(){ char s[105]; int num,num1; int n,len; int i,j,c; int jie,jie1; long long t,sum; cin>>c; while(c--) { cin>>s; n=0; sum=1; t=1; cin>>num; .. 阅读全文
posted @ 2012-07-20 13:55 xinmenghuairi 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 这个主要是利用:a=b+c ==> a%d=b%d+c%d;a=b*c ==> a%d=((b%d)*(c%d))%d;代码:#include<iostream>#include<string>using namespace std;int main(){ char st[1005]; int num; int i,j,len,s,t; while(cin>>st) { cin>>num; len=strlen(st); s=0; for(i=len-1;i>=0;i--) { t=st[i]-'0'; for( 阅读全文
posted @ 2012-07-20 10:13 xinmenghuairi 阅读(112) 评论(0) 推荐(0) 编辑
  2012年7月15日
摘要: 题目大意是在给出的规则下最短时间内抓住那只牛:代码:#include<iostream>#include<cstring>#include<queue>using namespace std;struct point{ int x; int step;};int used[100005];int s,e;int dfs(int x){ queue<point> que; point tp,ans; int tx; ans.x=s; ans.step=0; used[x]=0; que.push(ans); while(!que.empty()) 阅读全文
posted @ 2012-07-15 10:43 xinmenghuairi 阅读(254) 评论(0) 推荐(0) 编辑
  2012年7月10日
摘要: 这个题于找最短路劲相识但是,又有点不同,其想法跟最短路劲的想法,要找到最大的,即要将dis[i]和hash[i]全部处理为0,寻找更新时要找最大值,然后其他的都相识,短路劲dis[i]=map[起始端][i],hash[i]=0,hash[起始端]=1;代码:#include<iostream>using namespace std;double map[1002][1002];double dis[1002];int n,q,hash[1002];int se[1002][3]; void djs(int v,int v1){int i,j,index;double mi; fo 阅读全文
posted @ 2012-07-10 23:54 xinmenghuairi 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 利用Floyd算法:设 g[i][j] 为 i 与 j 间边长, d[i][j] 为 i 与 j 间临时最短路。for(k=1;k<=n;k++){ for(i=1;i<k;i++) for(j=i+1;j<k;j++) MIN=min(MIN,dist[i][j]+c[i][k]+c[k][j]); for(i=1;i<=n;i++) for(j=1;j<=n;j++) dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);}算法解释:根据Floyd算法原理,在最外层循环到k时,在d[i][j]的路径里所有节点的编号是 阅读全文
posted @ 2012-07-10 12:02 xinmenghuairi 阅读(273) 评论(0) 推荐(0) 编辑