该题大意是套汇问题,货币根据汇率转换来套取多余的钱数,由于是各个货币两两转换,即由Floyd判环应用变形则可解决问题。
Floyd算法用于解决任意两个节点之间的最短距离,判断是否成环等,其实质为动态规划。
1 /*Floyd算法的应用*/ 2 #include<iostream> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 char cur[31][20]; 7 double map[31][31]; 8 9 int main()10 {11 int n,m,i,j,k,x,y,flag,kk=0;12 char c1[20],c2[20];13 double t,rate;14 while(cin>>n&&n!=0)15 {16 kk++;17 for(i=0;i<n;i++)18 cin>>cur[i];19 cin>>m;20 flag=0;21 memset(map,0,sizeof(map));22 for(i=0;i<m;i++)23 {24 cin>>c1>>rate>>c2; 25 for(j=0;j<n;j++)26 { 27 if(strcmp(c1,cur[j])==0)28 x=j;29 if(strcmp(c2,cur[j])==0)30 y=j; 31 }32 map[x][y]=rate;33 } 34 for(k=0;k<n;k++)35 for(i=0;i<n;i++)36 for(j=0;j<n;j++)37 {38 t=map[i][k]*map[k][j];39 if(t>map[i][j])40 map[i][j]=t;41 }42 for(i=0;i<n;i++)43 if(map[i][i]>1.0)44 {45 flag=1;46 break;47 }48 if(flag==0)49 cout<<"Case "<<kk<<": No"<<endl;50 else51 cout<<"Case "<<kk<<": Yes"<<endl;52 }53 return 0;54 }
后天就要有选拔赛了,也知道自己的水平如何,只需放心大胆的去做,不需在乎成绩,只求会的作对,加油!