摘要: #include<stdio.h>#include<string.h>int a[101][1001],b[101][1001];int n;#define max1(a,b) (a>b)?(a):(b);int max2(int a,int b,int c){ b=max1(b,c); a=max1(a,b); return a;}int dp(int i,int j){ if(b[i][j]>=0) return b[i][j]; return b[i][j]=a[i][j]+(i==n-1?0:max2(dp(i+1,j),dp(i+1,j+1),dp 阅读全文
posted @ 2012-09-01 21:11 尔滨之夏 阅读(209) 评论(0) 推荐(0) 编辑
摘要: Description某种病毒袭击了某地区,该地区有N(1≤N≤50000)人,分别编号为0,1,...,N-1,现在0号已被确诊,所有0的直接朋友和间接朋友都要被隔离。例如:0与1是直接朋友,1与2是直接朋友,则0、2就是间接朋友,那么0、1、2都须被隔离。现在,已查明有M(1≤M≤10000)个直接朋友关系。如:0,2就表示0,2是直接朋友关系。请你编程计算,有多少人要被隔离。Input第一行包含两个正整数N(1≤N≤50000),M(1≤M≤100000),分别表示人数和接触关系数量;在接下来的M行中,每行表示一次接触,;每行包括两个整数U, V(0 <= U, V < N) 阅读全文
posted @ 2012-09-01 20:07 尔滨之夏 阅读(211) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>int next[50010];int find(int a){ return a==next[a]?a:(find(next[a]));//用到数据结构并查集的两种用法;}int main(){ int n,m,i,a,b,sum,x,y; while(scanf("%d%d",&n,&m)!=EOF) { sum=0; for(i=0;i<n;i++) next[i]=i; while(m--) { scanf("%d%d",&a,&b); x=find(a);y=f 阅读全文
posted @ 2012-09-01 20:00 尔滨之夏 阅读(457) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<string.h>int main(){ int n,i,len,j; char a[1000],b[1000],top,g,t; while(scanf("%d",&n)!=EOF) for(i=0;i<n;i++) { scanf("%s",a); len=strlen(a); top=0; g=-1; for(j=len-1;j>=0;j--) if(a[j]=='@') { g=j; break; } for(j=g+1;j<le 阅读全文
posted @ 2012-09-01 16:33 尔滨之夏 阅读(349) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<string.h>int main(){ int sum,i; char s[1001]; while(scanf("%s",s)!=EOF) { if(s[0]=='0') break; sum=0; for(i=0;i<strlen(s);i++) sum=((sum*10)+s[i]-'0')%33;//大数求余的方法 printf(sum==0?"O... 阅读全文
posted @ 2012-09-01 16:32 尔滨之夏 阅读(181) 评论(0) 推荐(0) 编辑