青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

The Fourth Dimension Space

枯葉北風寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

集訓專題訓練1::搜索 福大校賽 G 整除45問題,狀態空間搜索

五月份做的吧 那個時候用了dp 死活過不了 后來聽人說dp是可行的 但我還是不會,囧。。。這題用了比較快的廣搜算法,用v[i][j][k]存儲余數從i->j,去掉數字為k的情況,由于狀態空間<1000,所以窮搜狀態空間是可行的。這題具體來說可以分成三種情況:
1.字符串中既沒有5也沒有0,那么可以直接impossble掉
2.如果字符串中有5但是沒有0,可以先去掉一個5,然后在窮搜,最后在末尾添加上。
3.其他情況,只要有0,末尾一定是0。
代碼如下:
#include<iostream>
#include
<algorithm>
#include
<cmath>
#include
<cstring>
using namespace std;

struct node
{
    
int num[10];
    
int r;
}
q[1010];

int getd(int num[])//統計這個大數的位數
{
    
int ans=0;
    
for(int i=0;i<10;i++)
    
{
        ans
+=num[i];
    }

    
return ans;
}

int getsum(int num[])//統計這個大數每位之和
{

    
int ans=0;
    
for(int i=0;i<10;i++)
    
{
        ans
+=num[i]*i;
    }

    
return ans;
}



int v[11][11][11];//hash判重
int num[10];//初始大數
int flagnum[10];
char s[2000];//字符串
int t;
bool haszero;//有0嗎?
bool hasfive;//有5嗎?

int ansnum[10];//最終結果,有中間處理,注意加0加5的情況
int ansflag;
int cmp(int ansnum[],int num[])
{

    
int len1=getd(ansnum);
    
int len2=getd(num);

    
//特別處理一下兩個數是全0的情況
    if(getsum(ansnum)==0&&getsum(num)==0)
        
return 0;
    
else if(getsum(ansnum)==0&&getsum(num)!=0)
        
return -1;
    
else if(getsum(ansnum)!=0&&getsum(num)==0)
        
return 1;
    
//end

    
if(len1>len2)
        
return 1;
    
else if(len1<len2)
        
return -1;
    
else
    
{
        
int i;
        
for(i=9;i>=1;i--)
        
{
            
if(ansnum[i]>num[i])
                
return 1;
            
else if(ansnum[i]<num[i])
                
return -1;
        }

        
return 0;
    }

}


void copy(int t[],int s[])//copy s里面的東西到t 
{
    
int i;
    
for(i=0;i<=9;i++)
        t[i]
=s[i];
}

void input()//從1開始存儲
{
    ansflag
=0;
    hasfive
=haszero=0;
    scanf(
"%s",s+1);
    memset(ansnum,
0,sizeof(ansnum));
    memset(num,
0,sizeof(num));
    memset(v,
0,sizeof(v));
    
int i;
    
int len=strlen(s+1);
    
for(i=1;i<=len;i++)
    
{
        
int tt=(s[i]-'0');
            num[tt]
++;
        
if(tt==0)
            haszero
=1;
        
if(tt==5)
            hasfive
=1;
    }

}


void output(int num[])//沒有加回車,注意預先去掉的數字
{

    
for(int i=9;i>=0;i--)
    
{

        
if(num[i]!=0)
            
for(int j=1;j<=num[i];j++)
                printf(
"%d",i);
    }

}


int main()
{
    
int t;
    scanf(
"%d",&t);
    
while(t--)
    
{
        input();
        
if(!haszero&&!hasfive)
        
{
            printf(
"impossible\n");
            
continue;
        }

        
/*
        if(haszero&&!hasfive)
        {

            int l,r;
            l=r=1;
            copy(q[1].num,num);
            int tem=getsum(q[1].num);
            tem%=9;
            q[1].r=tem%9;
            v[tem][tem][0]=1;
            while(l<=r)
            {
                if(cmp(q[l].num,ansnum)==1&&q[l].r==0)
                {
                    ansflag=1;
                    copy(ansnum,q[l].num);
                }


                for(int i=1;i<10;i++)
                {
                    int nr=(q[l].r-i+9)%9;
                    if(q[l].num[i]>0&&v[q[l].r][nr][i]==0)
                    {
                        r++;
                        copy(q[r].num,q[l].num);
                        q[r].num[i]--;
                        q[r].r=nr;
                        v[q[l].r][nr][i]=1;
                    }
                }
                l++;
            }

            if(ansflag==1)
            {
                output(ansnum);
                printf("\n");
            }
            else
                printf("0\n");
        }
        
        
*/


        
else if(!haszero&&hasfive)//沒有0但是有5
        {

            
int l,r;
            l
=r=1;
            copy(q[
1].num,num);
            q[
1].num[5]--;
            
int tem=getsum(q[1].num);
            q[
1].r=tem%9;
            tem
%=9;
            v[tem][tem][
0]=1;
            
while(l<=r)
            
{
                
if(cmp(q[l].num,ansnum)==1&&q[l].r==4)
                
{
                    ansflag
=1;
                    copy(ansnum,q[l].num);
                }


                
                
for(int i=1;i<10;i++)
                
{
                    
/*
                    if(i==5)
                    {
                        __asm
                        {

                            int 3;
                        }
                    }
                    
*/

                    
int nr=(q[l].r-i+9)%9;
                    
if(q[l].num[i]>0&&v[q[l].r][nr][i]==0)
                    
{
                        r
++;
                        copy(q[r].num,q[l].num);
                        q[r].num[i]
--;
                        q[r].r
=nr;
                        v[q[l].r][nr][i]
=1;
                    }

                }

                l
++;
            }


            
if(ansflag==1)
            
{
                output(ansnum);
                printf(
"5\n");
            }

            
else
                printf(
"impossible\n");
        }

        
else //沒有0但是有5或者有0有5,情況相同
        {

            
int l,r;
            l
=r=1;
            copy(q[
1].num,num);
            
int tem=getsum(q[1].num);
            tem
%=9;
            q[
1].r=tem%9;
            v[tem][tem][
0]=1;
            
while(l<=r)
            
{
                
if(cmp(q[l].num,ansnum)==1&&q[l].r==0)
                
{
                    ansflag
=1;
                    copy(ansnum,q[l].num);
                }



                
for(int i=1;i<10;i++)
                
{
                    
int nr=(q[l].r-i+9)%9;
                    
if(q[l].num[i]>0&&v[q[l].r][nr][i]==0)
                    
{
                        r
++;
                        copy(q[r].num,q[l].num);
                        q[r].num[i]
--;
                        q[r].r
=nr;
                        v[q[l].r][nr][i]
=1;
                    }

                }

                l
++;
            }


            
if(ansflag==1)
            
{
                output(ansnum);
                printf(
"\n");
            }

            
else
                printf(
"0\n");
        }

    }

    
return 0;
}
代碼寫的比較長比較猥瑣,不知道能把幾個廣搜合并下么。
感謝messidou神牛指點。

posted on 2010-07-03 10:58 abilitytao 閱讀(1567) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费看亚洲片| 亚洲国产欧美一区| 久久大香伊蕉在人线观看热2| 欧美日韩国产首页| 一区二区三区欧美成人| 欧美亚洲在线| 在线观看日韩一区| 欧美日韩直播| 久久久久久亚洲精品杨幂换脸| 亚洲电影免费观看高清完整版在线 | 久久夜色撩人精品| 亚洲区在线播放| 国产日本欧美一区二区| 久热精品视频在线免费观看| 99国产精品99久久久久久| 久久夜色精品| 亚洲第一精品福利| 在线综合+亚洲+欧美中文字幕| 欧美二区在线播放| 久久久99久久精品女同性| 亚洲视频一起| 黄色在线成人| 国产欧美日本一区二区三区| 在线免费观看成人网| 国产伦精品一区二区三区在线观看 | 欧美在线视频免费| 国产精品99久久久久久宅男| 性色av一区二区怡红| 一本色道久久综合一区| 欧美呦呦网站| 欧美天天视频| 亚洲国产mv| 在线日韩中文字幕| 中日韩午夜理伦电影免费| 久久在线视频在线| 宅男噜噜噜66国产日韩在线观看| 久久久久久一区二区三区| 国产精品美女诱惑| 欧美性猛交xxxx免费看久久久 | 99精品欧美一区二区三区综合在线 | 国产精品亚洲不卡a| 欧美午夜片在线观看| 黄色成人免费观看| 国产一区二区三区免费在线观看| 国产精品啊v在线| 亚洲第一福利视频| 久久精品国产在热久久| 久久精品国产99国产精品| 亚洲清纯自拍| 亚洲精品日韩欧美| 在线视频你懂得一区| 欧美精品国产| 欧美日韩成人激情| 亚洲黄色免费| 欧美国产乱视频| 每日更新成人在线视频| 欧美大片18| 久久精品国产亚洲一区二区三区 | 国产精品日日摸夜夜摸av| 一区二区高清在线观看| 久久国内精品视频| 亚洲一区二区网站| 久久免费99精品久久久久久| 久久久久久91香蕉国产| 国产伦精品一区| 亚洲欧美一区二区三区极速播放| 久久国产色av| 香蕉久久夜色精品国产| 国产视频一区欧美| 最新亚洲视频| 亚洲国产婷婷| 亚洲女人天堂av| 米奇777超碰欧美日韩亚洲| 美女图片一区二区| 最新日韩欧美| 亚洲毛片在线观看| 国产精品久久久久久户外露出| 加勒比av一区二区| 蜜臀av性久久久久蜜臀aⅴ| 免费观看亚洲视频大全| 国产精品亚洲аv天堂网| 欧美一区二区免费| 亚洲精品人人| 国产精品久久精品日日| 久久精品最新地址| 欧美18av| 性做久久久久久| 久久久久国产一区二区| 亚洲国产成人午夜在线一区 | 欧美在线视频在线播放完整版免费观看 | 亚洲人www| 9色国产精品| 国产一区二区三区在线观看免费| 免费视频一区二区三区在线观看| 欧美精品一区二区三区高清aⅴ| 国产麻豆视频精品| 蜜桃av噜噜一区| 国产精品高潮在线| 免费观看久久久4p| 国产精品一区二区女厕厕| 免费日韩精品中文字幕视频在线| 欧美三级黄美女| 蜜桃伊人久久| 国产精品日韩高清| 亚洲丰满在线| 国产一区二区电影在线观看 | 老牛影视一区二区三区| 欧美日韩xxxxx| 麻豆av一区二区三区| 国产精品嫩草99av在线| 亚洲国产高清在线观看视频| 国产视频亚洲| 亚洲一区区二区| 一区二区三区蜜桃网| 久久久无码精品亚洲日韩按摩| 亚洲深夜影院| 免费成人av| 久久久久久有精品国产| 亚洲在线视频网站| 一本久道综合久久精品| 亚洲美女尤物影院| 欧美精品入口| 蜜月aⅴ免费一区二区三区| 国产精品久久久久影院亚瑟| 最新国产拍偷乱拍精品| 麻豆成人精品| 麻豆成人在线| 黄色成人在线观看| 欧美一区二区三区精品| 激情丁香综合| 欧美一区二区三区免费观看| 午夜精品一区二区三区在线| 国产精品白丝av嫩草影院 | 亚洲亚洲精品三区日韩精品在线视频| 国产精品久久久久一区二区三区| 欧美激情片在线观看| 91久久国产精品91久久性色| 久久精品一区四区| 欧美v日韩v国产v| 欧美日韩在线不卡| 亚洲免费婷婷| 久久本道综合色狠狠五月| 亚洲国产精品久久久久秋霞影院 | 国产伦精品一区二区三区四区免费 | 一区二区三区国产精品| 亚洲调教视频在线观看| 欧美午夜精品久久久久免费视| 99在线精品视频在线观看| 亚洲一区二区三区四区五区黄| 欧美一区二区观看视频| 久久久久国产成人精品亚洲午夜| 国内外成人在线| 亚洲经典在线| 日韩一级大片在线| 国产精品qvod| 欧美在线免费视频| 欧美激情中文字幕一区二区 | 中文成人激情娱乐网| 国产精品日韩欧美一区二区三区| 亚洲欧美在线观看| 亚洲激情偷拍| 欧美精品免费在线| 亚洲一区免费网站| 免费成人黄色av| 在线综合视频| 国内精品久久久久影院薰衣草| 欧美99久久| 亚洲一区美女视频在线观看免费| 久久五月激情| 亚洲视频综合在线| 国模吧视频一区| 欧美区在线观看| 欧美在线观看一区| 亚洲精品美女久久7777777| 亚欧美中日韩视频| 日韩一级在线观看| 好吊成人免视频| 欧美日韩免费一区二区三区| 欧美综合国产| 中文一区二区| 欧美激情网站在线观看| 欧美一区激情| 亚洲午夜黄色| 亚洲高清在线视频| 国产日韩精品在线播放| 欧美福利视频网站| 欧美激情精品久久久久久久变态| 日韩午夜在线观看视频| 国内精品嫩模av私拍在线观看| 欧美日韩一区二区三区高清| 久久免费观看视频| 亚洲欧美在线视频观看| 亚洲精品孕妇| 亚洲第一精品久久忘忧草社区| 性欧美超级视频| 亚洲午夜久久久久久久久电影网| 亚洲娇小video精品| 激情另类综合| 国模叶桐国产精品一区| 国产区日韩欧美|