ArcTan

dfs
随笔 - 16, 文章 - 117, 评论 - 6, 引用 - 0
数据加载中……

poj1426(bfs、dp)

http://poj.org/problem?id=1426

bfs:刚刚拿到想把所有数给用字符串保存,这样最多可有100个01呢。
一直都觉得这样朴素的算法很恶心,就去吃饭去了,我嚓,12点吃早饭。
突然想到其实我的串可以que[]里存0和1嘛,然后索引一下就好了于是乎,行了,嘿嘿。这样递推过去的,其实应该是可以整出了dp状态转移方程的哈,等会想想呢
bfs:
32MS
#include<stdio.h>
#include
<string.h>
#include
<math.h>
int n;
int que[1000005],pre[1000005],q[1000005],ans[205];//que[] 0、1,q[]当前余数,pre[]前驱。
int bfs()
{
    
int head,tail,now,next,i;
    head
=0;tail=1;que[1]=1;pre[1]=0;q[1]=1;
    
while (head<tail)
    {
        now
=q[++head]*10;
        
for (i=0;i<=1 ;i++ )
        {
            next
=now+i;
            tail
++;
            que[tail]
=i;
            q[tail]
=next%n;
            pre[tail]
=head;
            
if (!q[tail])
                
return tail;
        }
    }
}
int main()
{
    
int i,k;
    
while (scanf("%d",&n)==1&&n)
    {
        i
=bfs();
        k
=0;
        
while (i)
        {
            ans[
++k]=que[i];
            i
=pre[i];
        }
        
for (i=k;i>=1 ;i-- )
            printf(
"%d",ans[i]);
        printf(
"\n");
    }
    
return 0;
}
同学用的long long 也过了,容我研究研究哈。
long long:我晕,居然跑了110MS
dp会跑多久么?

posted on 2012-04-02 14:16 wangs 阅读(270) 评论(0)  编辑 收藏 引用 所属分类: ACM-模拟


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理