枚举 poj1012

来源:互联网 发布:深圳c语言培训班 编辑:程序博客网 时间:2024/06/07 10:09

自己首先写了程序,想了好长时间的节省时间到最后还是超市,后来后来只好暴力啦!因为k是小于14的,所以就开了一个数组将前14个的值记下来然后提交上去0MS过了,不过也没有一点自豪感啊!

超时的代码:

#include<iostream>using namespace std;int main(){int k,i,m,j,l,r;bool vis[30];while(1){scanf("%d",&k);if(k==0)break;int sign=0;for(r=k+1; ; r+=k+1){for(i=r; i<=r+1; i++){    int t=i;    for(j=k+1; j<=2*k; j++)        vis[j]=false;    m=2*k;    while(1){ t=t%m;if(t==0)t=m;        if(t<=k)//此时就是取得前面的数的        break;        t=t-k;        for(j=k+1; j<=2*k; j++)         if(vis[j]==false) {         t--;         if(t==0) {        vis[j]=true;    m--;     t=i;//     t=i-(m-k);         for(l=j+1; l<=2*k; l++) {     if(vis[l]==false)     t--; }     if(m==k)     goto xy;     break; } } }}}xy:printf("%d\n",i);}return 0;}

超级超级暴力的代码啊!:

#include<iostream>using namespace std;int main(){int a[15],k;    a[1]=2;a[2]=7;a[3]=5;a[4]=30;a[5]=169;a[6]=441;a[7]=1872;a[8]=7632;a[9]=1740;a[10]=93313;a[11]=459901;a[12]=1358657;a[13]=2504881;a[14]=13482720;while(1){cin>>k;if(k==0)break;cout<<a[k]<<endl;}return 0;}



 

原创粉丝点击