USACO1.4 The Clocks(clocks)
生活随笔
收集整理的這篇文章主要介紹了
USACO1.4 The Clocks(clocks)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
????????使用暴力搜索,枚舉所有移動方案,及時中止不合時方案來節省時間。到現在依舊不會使用更高級的搜索算法,下一步需要學習一下理論知識。
?
/* ID:jzzlee1 PROG:clocks LANG:C++ */ #include<iostream> #include<fstream> #include<cstring> #include<cctype> #include<cstdio> using namespace std; ifstream fin("clocks.in"); ofstream fout("clocks.out"); int a[10],s=0,m=1000000,c[10],d[10],e[10]; //b[][]保存9種移動方法,每移一次加1 int b[10][10]={{0,0,0,0,0,0,0,0,0,0},{0,1,1,0,1,1,0,0,0,0},{0,1,1,1,0,0,0,0,0,0},{0,0,1,1,0,1,1,0,0,0},{0,1,0,0,1,0,0,1,0,0},{0,0,1,0,1,1,1,0,1,0},{0,0,0,1,0,0,1,0,0,1},{0,0,0,0,1,1,0,1,1,0},{0,0,0,0,0,0,0,1,1,1},{0,0,0,0,0,1,1,0,1,1}}; bool flag=true; void find() {//c[]保存每種方法的使用次數,最多3次,因為第4次就會回到原來位置//c[0]~c[9]是一種移動方案的組合,for(c[1]=0;c[1]<=3;c[1]++)for(c[2]=0;c[2]<=3;c[2]++)for(c[3]=0;c[3]<=3;c[3]++)for(c[4]=0;c[4]<=3;c[4]++)for(c[5]=0;c[5]<=3;c[5]++)for(c[6]=0;c[6]<=3;c[6]++)for(c[7]=0;c[7]<=3;c[7]++)for(c[8]=0;c[8]<=3;c[8]++)for(c[9]=0;c[9]<=3;c[9]++){//對每種移動方案進行檢驗flag=true; for(int i=1;i<=9;i++) a[i]=d[i]; for(int i=1;i<=9;i++) //i:1~9,依次檢驗a[]的9個位置 { for(int j=1;j<=9;j++) //對a[i]位置使用當前移動方案a[i]+=b[j][i]*c[j]; a[i]%=4; if(a[i]!=0) //如果當前移動方案對a[i]位置不合適,不必繼續檢驗a[i+1],退出檢驗該方案的循環以節省時間 { flag=false; break; } } if(flag)//方案通過檢驗 if(c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]<m) { m=c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]; for(int i=1;i<=9;i++) //記錄該方案每種移動方法的使用次數 e[i]=c[i]; }} } int main() {for(int i=1;i<=9;i++){//cin>>a[i];fin>>a[i];a[i]/=3;a[i]%=4;d[i]=a[i]; }find();flag=false;for(int i=1;i<=9;i++)for(int j=1;j<=e[i];j++){if(flag)//cout<<" ";fout<<" ";elseflag=true;//cout<<i;fout<<i;}//cout<<endl;fout<<endl;return 0; }轉載于:https://my.oschina.net/u/347565/blog/62034
總結
以上是生活随笔為你收集整理的USACO1.4 The Clocks(clocks)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图解使用Win8Api进行Metro风格
- 下一篇: 拿来主义——老外写的系统统计脚本