| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1327 人关注过本帖
标题:K好数,求大神用正确的动态规划实现,
取消只看楼主 加入收藏
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:3 
K好数,求大神用正确的动态规划实现,

如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输出它对1000000007取模后的值。

输入格式


输入包含两个正整数,K和L。

输出格式

输出一个整数,表示答案对1000000007取模后的值。

样例输入

4 2

样例输出

7

数据规模与约定


对于30%的数据,KL <= 106;

对于50%的数据,K <= 16, L <= 10;

对于100%的数据,1 <= K,L <= 100。
本人也做了,但行不通,时间太长,效
程序代码:
#include <stdio.h>
#include <stdlib.h>
static int N1=0;
static int N2=1;
int jude(int n[],int wei)
{
    int jude2(int n[],int n1,int n2,int wei);
    if(wei==1)
    return 0;
    if(wei==2)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
        return 1;
    }
    if(wei==3)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          return 1;
    }
    if(wei==4)
    {
   
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          return 1;
    }
    if(wei==5)
    {
           
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          if((n[3]+1!=n[4])&&(n[3]-1!=n[4]))
          return 1;
    }
    if(wei==6)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          if((n[3]+1!=n[4])&&(n[3]-1!=n[4]))
          if((n[4]+1!=n[5])&&(n[4]-1!=n[5]))
          return 1;
    }
    if(wei==7)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          if((n[3]+1!=n[4])&&(n[3]-1!=n[4]))
          if((n[4]+1!=n[5])&&(n[4]-1!=n[5]))
          if((n[5]+1!=n[6])&&(n[5]-1!=n[6]))
          return 1;    
    }
    if(wei==8)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          if((n[3]+1!=n[4])&&(n[3]-1!=n[4]))
          if((n[4]+1!=n[5])&&(n[4]-1!=n[5]))
          if((n[5]+1!=n[6])&&(n[5]-1!=n[6]))
          if((n[6]+1!=n[7])&&(n[6]-1!=n[7]))
          return 1;
    }
    if(wei==9)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          if((n[3]+1!=n[4])&&(n[3]-1!=n[4]))
          if((n[4]+1!=n[5])&&(n[4]-1!=n[5]))
          if((n[5]+1!=n[6])&&(n[5]-1!=n[6]))
          if((n[6]+1!=n[7])&&(n[6]-1!=n[7]))
          if((n[7]+1!=n[8])&&(n[7]-1!=n[8]))
          return 1;
    }
    if(wei==10)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          if((n[3]+1!=n[4])&&(n[3]-1!=n[4]))
          if((n[4]+1!=n[5])&&(n[4]-1!=n[5]))
          if((n[5]+1!=n[6])&&(n[5]-1!=n[6]))
          if((n[6]+1!=n[7])&&(n[6]-1!=n[7]))
          if((n[7]+1!=n[8])&&(n[7]-1!=n[8]))
          if((n[8]+1!=n[9])&&(n[8]-1!=n[9]))
          return 1;
    }
    if(wei==11)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          if((n[3]+1!=n[4])&&(n[3]-1!=n[4]))
          if((n[4]+1!=n[5])&&(n[4]-1!=n[5]))
          if((n[5]+1!=n[6])&&(n[5]-1!=n[6]))
          if((n[6]+1!=n[7])&&(n[6]-1!=n[7]))
          if((n[7]+1!=n[8])&&(n[7]-1!=n[8]))
          if((n[8]+1!=n[9])&&(n[8]-1!=n[9]))
          if((n[9]+1!=n[10])&&(n[9]-1!=n[10]))
          return 1;
    }
    if(wei==12)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          if((n[3]+1!=n[4])&&(n[3]-1!=n[4]))
          if((n[4]+1!=n[5])&&(n[4]-1!=n[5]))
          if((n[5]+1!=n[6])&&(n[5]-1!=n[6]))
          if((n[6]+1!=n[7])&&(n[6]-1!=n[7]))
          if((n[7]+1!=n[8])&&(n[7]-1!=n[8]))
          if((n[8]+1!=n[9])&&(n[8]-1!=n[9]))
          if((n[9]+1!=n[10])&&(n[9]-1!=n[10]))
          if((n[10]+1!=n[11])&&(n[10]-1!=n[11]))
          return 1;
    }
    if(wei==13)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          if((n[3]+1!=n[4])&&(n[3]-1!=n[4]))
          if((n[4]+1!=n[5])&&(n[4]-1!=n[5]))
          if((n[5]+1!=n[6])&&(n[5]-1!=n[6]))
          if((n[6]+1!=n[7])&&(n[6]-1!=n[7]))
          if((n[7]+1!=n[8])&&(n[7]-1!=n[8]))
          if((n[8]+1!=n[9])&&(n[8]-1!=n[9]))
          if((n[9]+1!=n[10])&&(n[9]-1!=n[10]))
          if((n[10]+1!=n[11])&&(n[10]-1!=n[11]))
          if((n[11]+1!=n[12])&&(n[11]-1!=n[12]))
          return 1;
    }
    if(wei==14)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          if((n[3]+1!=n[4])&&(n[3]-1!=n[4]))
          if((n[4]+1!=n[5])&&(n[4]-1!=n[5]))
          if((n[5]+1!=n[6])&&(n[5]-1!=n[6]))
          if((n[6]+1!=n[7])&&(n[6]-1!=n[7]))
          if((n[7]+1!=n[8])&&(n[7]-1!=n[8]))
          if((n[8]+1!=n[9])&&(n[8]-1!=n[9]))
          if((n[9]+1!=n[10])&&(n[9]-1!=n[10]))
          if((n[10]+1!=n[11])&&(n[10]-1!=n[11]))
          if((n[11]+1!=n[12])&&(n[11]-1!=n[12]))
          if((n[12]+1!=n[13])&&(n[12]-1!=n[13]))
          return 1;
    }
    if(wei==15)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          if((n[3]+1!=n[4])&&(n[3]-1!=n[4]))
          if((n[4]+1!=n[5])&&(n[4]-1!=n[5]))
          if((n[5]+1!=n[6])&&(n[5]-1!=n[6]))
          if((n[6]+1!=n[7])&&(n[6]-1!=n[7]))
          if((n[7]+1!=n[8])&&(n[7]-1!=n[8]))
          if((n[8]+1!=n[9])&&(n[8]-1!=n[9]))
          if((n[9]+1!=n[10])&&(n[9]-1!=n[10]))
          if((n[10]+1!=n[11])&&(n[10]-1!=n[11]))
          if((n[11]+1!=n[12])&&(n[11]-1!=n[12]))
          if((n[12]+1!=n[13])&&(n[12]-1!=n[13]))
          if((n[13]+1!=n[14])&&(n[13]-1!=n[14]))
          return 1;
    }
    if(wei==16)
    {
        if((n[0]+1!=n[1])&&(n[0]-1!=n[1]))
          if((n[1]+1!=n[2])&&(n[1]-1!=n[2]))
          if((n[2]+1!=n[3])&&(n[2]-1!=n[3]))
          if((n[3]+1!=n[4])&&(n[3]-1!=n[4]))
          if((n[4]+1!=n[5])&&(n[4]-1!=n[5]))
          if((n[5]+1!=n[6])&&(n[5]-1!=n[6]))
          if((n[6]+1!=n[7])&&(n[6]-1!=n[7]))
          if((n[7]+1!=n[8])&&(n[7]-1!=n[8]))
          if((n[8]+1!=n[9])&&(n[8]-1!=n[9]))
          if((n[9]+1!=n[10])&&(n[9]-1!=n[10]))
          if((n[10]+1!=n[11])&&(n[10]-1!=n[11]))
          if((n[11]+1!=n[12])&&(n[11]-1!=n[12]))
          if((n[12]+1!=n[13])&&(n[12]-1!=n[13]))
          if((n[13]+1!=n[14])&&(n[13]-1!=n[14]))
          if((n[14]+1!=n[15])&&(n[14]-1!=n[15]))
          return 1;
    }
    if(wei>=2)
    {
        if(jude2(n,N1,N2,wei)==1)
         return 1;
    }
    return 0;
}
int jude2(int n[],int n1,int n2,int wei)
{
    if((n[n1]+1!=n[n2])&&(n[n1]-1!=n[n2])&&n2<=wei)
      {
        jude2(n,N1+=1,N2+=1,wei);
        return 1;
         }
       return 0;
}
void jinzi(int n[],int k,int ge,int shi)
{
    n[shi]+=1;
    n[ge]=0;
    if(n[shi]==k&&shi>0)
    jinzi(n,k,ge-=1,shi-=1);
}
int leave(int n[],int n1,int n2,int k,int wei)
{
    if((n[n1]==k-1)&&n[n2]==k-1&&n2<wei)
      {
        leave(n,n1+=1,n2+=1,k,wei);
        return 1;
         }
       return 0;
}
int trans(int k,int wei)
{
    int number=0;
    if(k<=2)
    return 0;
    int N[100];
    int f1,f2;
    N[0]=1;
    for(f1=1;f1<wei;f1++)
    {
        N[f1]=0;
    }
    while(1)
    {
        N[wei-1]++;
        if(N[wei-1]==k)
         jinzi(N,k,wei-1,wei-2);
        if(jude(N,wei)==1)
         number++;
        if(leave(N,0,1,k,wei)==1)
         break;
    }
    return number%1000000007;
}
int main(int argc, char *argv[]) {
    int k,l,j;
    scanf("%d%d",&k,&l);
    printf("%d",trans(k,l));
    scanf("%d",&j);
    return 0;
}
率低,在OJ上得10分,
代码如下,求大神出更好的代码,
搜索更多相关主题的帖子: 自然数 正整数 动态 规模 
2014-02-24 21:44
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
收藏
得分:0 
回复 2楼 beyondyf
谢谢版主热心指导,我复制你的代码,到OJ上得30分哦,我看不懂你的程序,你看看还有什么问题吧。。

编写的程序,不能改变世界,却可以改变自己...
2014-02-25 20:48
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
收藏
得分:0 
回复 7楼 beyondyf
就是有些数据跑不过吧,提示错误,我告诉你内网我的帐号吧,你去看看吧,谢谢,http://lx.

编写的程序,不能改变世界,却可以改变自己...
2014-02-25 22:43
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
收藏
得分:0 
回复 8楼 beyondyf
嗯,通过了,我再慢慢消化你的程序啦,谢谢,

编写的程序,不能改变世界,却可以改变自己...
2014-02-25 23:22
快速回复:K好数,求大神用正确的动态规划实现,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038115 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved