Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
大哥们帮帮忙呀!我要哭了,超时 10*n^2,怎么改进呢?#include<stdio.h> #include<string.h> #include<math.h> int N,f[11][2501],a[11][2501]; bool yes[2501][2501]; struct book { int E; char S[30]; }books[2501]; void init() { int i,j; unsigned p1,p2; bool flag; for(i=1;i<=N;i++){ yes[i][i]=false; for(j=i+1;j<=N;j++){ flag=true; p1=0; p2=0; while(p1 < strlen(books[i].S) && p2 < strlen(books[j].S)){ while((p1 < strlen(books[i].S)) && !( (books[i].S[p1] >='A' && books[i].S[p1] <= 'Z') || (books[i].S[p1] >='a' && books[i].S[p1] <= 'z')) ) p1++; while((p2 < strlen(books[j].S)) && !( (books[j].S[p2] >='A' && books[j].S[p2] <= 'Z') || (books[j].S[p2] >='a' && books[j].S[p2] <= 'z')) ) p2++; if(books[i].S[p1] == books[j].S[p2] || abs(books[i].S[p1] - books[j].S[p2] == 32)) { yes[i][j]=yes[j][i]=false; flag=false; break; } p1++; p2++; } if(flag) yes[i][j]=yes[j][i]=true; } } } bool ok(int k,int j) { char temp1,temp2; unsigned p1=0,p2=0; while((p1 < strlen(books[k].S)) && !( (books[k].S[p1] >='A' && books[k].S[p1] <= 'Z') || (books[k].S[p1] >='a' && books[k].S[p1] <= 'z')) ) p1++; while((p2 < strlen(books[j].S)) && !( (books[j].S[p2] >='A' && books[j].S[p2] <= 'Z') || (books[j].S[p2] >='a' && books[j].S[p2] <= 'z')) ) p2++; temp1=books[k].S[p1];temp2=books[j].S[p2]; if(temp1>=97) temp1=temp1-32; if(temp2>=97) temp2=temp2-32; if(temp1<temp2) return true; else return false; } void work() { int b[11]; int ta,x,y,t; int result,i,j,k,max,maxs; int temp; for(i=2;i<=10;i++){ maxs=0; for(j=1;j<=N;j++){ max=0;ta=0; for(k=1;k<=N;k++){ if(yes[k][j] && ok(k,j)){ if(max<f[i-1][k]+books[j].E && f[i-1][k] != 0) { max=f[i-1][k]+books[j].E; ta=k; } } } a[i][j]=ta; f[i][j]=max; if(maxs<f[i][j] && f[i][j]>0) {maxs=f[i][j];x=i;y=j;} } if(maxs!=0) temp=maxs; else break; } result = i-1; b[result]=y; t=y; for(i=result;i>=2;i--){ b[i-1] = a[i][t]; t=a[i][t]; } printf("%d\n%d\n",result,temp); for(i=1;i<=result;i++) printf("%s\n",books[ b[i] ].S); } int main() { int i; while(EOF!=scanf("%d",&N)){ for(i=1;i<=N;i++){ scanf("%d ",&books[i].E); f[1][i]=books[i].E; gets(books[i].S); } init(); work(); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator