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 |
哪位大神可以告诉我,这两份代码有什么不同?---------------------------WA的代码---------------------------------- #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int loc[102][42][2]; double dp[42][102][42]; double calc(int x1,int y1,int x2,int y2) { return sqrt((double) ((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))); } int main() { int n; while (scanf("%d",&n)>0) { for (int i=1;i<=n;i++) { scanf("%d",&loc[i][0][0]); for (int j=1;j<=loc[i][0][0];j++) scanf("%d%d",&loc[i][j][0],&loc[i][j][1]); } memset(dp,0,sizeof(dp)); for (int i=1;i<=loc[1][0][0];i++) { for (int j=2;j<n;j++) { for (int k=1;k<=loc[j][0][0];k++) { double mini=dp[i][j-1][1]+calc(loc[j-1][1][0],loc[j-1][1][1],loc[j][k][0],loc[j][k][1]); for (int l=2;l<=loc[j-1][0][0];l++) if (dp[i][j-1][l]+calc(loc[j-1][l][0],loc[j-1][l][1],loc[j][k][0],loc[j][k][1])<mini) mini=dp[i][j-1][l]+calc(loc[j-1][l][0],loc[j-1][l][1],loc[j][k][0],loc[j][k][1]); dp[i][j][k]=mini; } } for (int k=1;k<=loc[n][0][0];k++) { double mini=dp[i][n-1][1]+calc(loc[n-1][1][0],loc[n-1][1][1],loc[n][k][0],loc[n][k][1])+ calc(loc[n][k][0],loc[n][k][1],loc[1][i][0],loc[1][i][1]); for (int l=2;l<=loc[n-1][0][0];l++) if (dp[i][n-1][l]+calc(loc[n-1][l][0],loc[n-1][l][1],loc[n][k][0],loc[n][k][1])+ calc(loc[n][k][0],loc[n][k][1],loc[1][i][0],loc[1][i][1])<mini) mini=dp[i][n-1][l]+calc(loc[n-1][l][0],loc[n-1][l][1],loc[n][k][0],loc[n][k][1])+ calc(loc[n][k][0],loc[n][k][1],loc[1][i][0],loc[1][i][1]); dp[i][n][k]=mini; } } double mint=0x7FFFFFFF; for (int i=1;i<=loc[1][0][0];i++) for (int j=1;j<=loc[n][0][0];j++) if (dp[i][n][j]<mint) mint=dp[i][n][j]; mint*=100; int mina=(int)mint; printf("%d\n",mina); } } ----------------------------AC的代码-------------------------------- #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int loc[102][42][2]; double dp[42][102][42]; double calc(int x1,int y1,int x2,int y2) { return sqrt((double) ((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))); } int main() { int n; while (scanf("%d",&n)>0) { for (int i=1;i<=n;i++) { scanf("%d",&loc[i][0][0]); for (int j=1;j<=loc[i][0][0];j++) scanf("%d%d",&loc[i][j][0],&loc[i][j][1]); } memset(dp,0,sizeof(dp)); for (int i=1;i<=loc[1][0][0];i++) for (int j=1;j<=loc[2][0][0];j++) dp[i][2][j]=calc(loc[1][i][0],loc[1][i][1],loc[2][j][0],loc[2][j][1]); for (int i=1;i<=loc[1][0][0];i++) { for (int j=3;j<=n;j++) { for (int k=1;k<=loc[j][0][0];k++) { double mini=dp[i][j-1][1]+calc(loc[j-1][1][0],loc[j-1][1][1],loc[j][k][0],loc[j][k][1]); for (int l=2;l<=loc[j-1][0][0];l++) if (dp[i][j-1][l]+calc(loc[j-1][l][0],loc[j-1][l][1],loc[j][k][0],loc[j][k][1])<mini) mini=dp[i][j-1][l]+calc(loc[j-1][l][0],loc[j-1][l][1],loc[j][k][0],loc[j][k][1]); dp[i][j][k]=mini; } } } double mint=0x7FFFFFFF; for (int i=1;i<=loc[1][0][0];i++) for (int j=1;j<=loc[n][0][0];j++) if (dp[i][n][j]+calc(loc[1][i][0],loc[1][i][1],loc[n][j][0],loc[n][j][1])<mint) mint=dp[i][n][j]+calc(loc[1][i][0],loc[1][i][1],loc[n][j][0],loc[n][j][1]); mint*=100; int mina=(int)mint; printf("%d\n",mina); } } ------------------------------------------------------------ Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator