首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

2013年湘潭市大学程序设计比赛

2013-03-13 
2013年湘潭大学程序设计比赛/*B题类型:动态规划,思考由后往前,代码,由前往后。。。注意边界。。。 */ #includei

2013年湘潭大学程序设计比赛

/*B题类型:动态规划,思考由后往前,代码,由前往后。。。注意边界。。。 */ #include<iostream>#include<cstdio>#include<string>#include<cmath>using namespace std;#define manx 1009string x;int z[manx];int main(){    int n;    while(cin>>n){        char s[109];        for(int i=0;i<manx;i++) z[i]=0;        x.clear();        for(int i=0;i<n;i++){            cin>>s;            x += s[0];        }        for(int i=0;i<x.size();i++){            for(int j=i-1;j>=0;j--){                z[i]=max(z[i],z[j]);                              if(x[i]==x[j] && j>=1) z[i]=max(z[i],z[j-1]+1);                 if(x[i]==x[j] && j==0) z[i]=max(z[i],1);            }        }        cout<<z[x.size()-1]<<endl;    }}/*4shaoshanerzhongshangxiadongmen5shaoshanshangxiaertianerzhongdongmen*/

/*G题 类型:状态压缩搜索思路,因为状态特殊,每一个状态都可以用一个数字来代替 */#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<queue>using namespace std;#define manx 600000int flag,mark;bool s[manx];struct node{    int ans;    int temp;};queue<node>que;void init(){    while(!que.empty()) que.pop();    for(int i=0;i<manx;i++) s[i]=0;}void bfs(int xx,int yy){    node te = que.front();    s[te.ans]=1;    while(!que.empty()){        te=que.front();        que.pop();     //   cout<<te.ans<<endl;      //  system("pause");        if(te.ans==mark){ flag=1; cout<<te.temp<<endl; break; }        int x[2][3];        x[0][0]=te.ans/100000%10;        x[0][1]=(te.ans/10000)%10;        x[0][2]=(te.ans/1000)%10;        x[1][0]=(te.ans/100)%10;        x[1][1]=(te.ans/10)%10;        x[1][2]=te.ans%10;        for(int i=0;i<2;i++){            for(int j=0;j<3;j++)                if(x[i][j]==0) xx=i,yy=j;        }                if(xx+1<2){            node qe=te;            swap(x[xx][yy],x[xx+1][yy]);            qe.temp++;            int sum=0;                        for(int i=0;i<2;i++){                for(int j=0;j<3;j++){                    sum=sum*10+x[i][j];                }            }            qe.ans=sum;            if(!s[sum]) { s[sum]=1; que.push(qe); }            swap(x[xx][yy],x[xx+1][yy]);        }        if(xx-1>=0){            node qe=te;            swap(x[xx][yy],x[xx-1][yy]);            qe.temp++;            int sum=0;                        for(int i=0;i<2;i++){                for(int j=0;j<3;j++){                    sum=sum*10+x[i][j];                }            }            qe.ans=sum;            if(!s[sum]) { s[sum]=1; que.push(qe); }            swap(x[xx][yy],x[xx-1][yy]);        }        if(yy+1<3){            node qe=te;            swap(x[xx][yy],x[xx][yy+1]);            qe.temp++;            int sum=0;                        for(int i=0;i<2;i++){                for(int j=0;j<3;j++){                    sum=sum*10+x[i][j];                }            }            qe.ans=sum;            if(!s[sum]) { s[sum]=1; que.push(qe); }            swap(x[xx][yy],x[xx][yy+1]);        }        if(yy-1>=0){            node qe=te;            swap(x[xx][yy],x[xx][yy-1]);            qe.temp++;            int sum=0;                        for(int i=0;i<2;i++){                for(int j=0;j<3;j++){                    sum=sum*10+x[i][j];                }            }            qe.ans=sum;            if(!s[sum]) { s[sum]=1; que.push(qe); }            swap(x[xx][yy],x[xx][yy-1]);        }    }}int main(){    int t;    cin>>t;    while(t--){        init();        int a,sum=0;        flag=0;        node te;        int st,ed,val;        for(int i=0;i<2;i++){            for(int j=0;j<3;j++){                scanf("%d",&val);                if(val==0) st=i,ed=j;                sum=sum*10+val;            }        }        te.ans=sum;        sum=0;        for(int i=0;i<2;i++){            for(int j=0;j<3;j++){                scanf("%d",&a);                sum=sum*10+a;             }        }        mark=sum;        te.temp=0;        que.push(te);        bfs(st,ed);        if(!flag) cout<<"Impossible!"<<endl;    }   //  while(1);}/*20 1 23 4 51 2 03 4 51 2 04 5 31 2 34 0 5*/

热点排行