zoukankan      html  css  js  c++  java
  • hdu 1480

    钥匙计数之二

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 987    Accepted Submission(s): 564

    Problem Description
    一把钥匙有N个槽,2<N<26槽深为1,2,3,4,5,6。每钥匙至少有3个不同的深度且相连的槽其深度之差不得为5。求这样的钥匙的总数。
     
    Input
    本题无输入
     
    Output
    对2<N<26,输出满足要求的钥匙的总数。
     
    Sample Output
    N=3: 104 N=4: 904 N=5: 5880 . . . . . N=25: 8310566473196300280
     
    此题类似于区间DP,有两种思考方式,从前往后和从后往前想,此题从前往后想,int x=0,int y=0;
    对于每种分类考虑是否有遗漏和重复 
    解法1
    假设前n-1个是钥匙,如果加上2,3,4,5是钥匙,那么 x+=4*a[n-1];
    如果加上1,6是钥匙的话,那么要除去n-1位是6,1的情况, y+=2*a[i-1]-b[i-1];
    假设前n-1个不是钥匙,如果加上2,3,4,5是钥匙,那么x+=4*(C(3,2)+C(3,1)*C(2,1))*((2^(i-1))-2)(由于前n-1个不是钥匙,所以前n-1个只有两种数,不能同时为1和6)
    如果加上1,6是钥匙,那么y+=2*(C(4,2)*(2^(i-1)-2)+(C(4,1)*(2^i-2)-1))(从2,3,4,5中选两个,和从2,3,4,5中选一个,对于1选6,对于6选1,两个都放在n-1位置上。)
    每一次利用上次处理得到的y(以1或者6结尾的钥匙)更新b[i],b[i]=y;
    解法二
    定义两种状态,d[i]代表以1和6结尾,dp[i]代表以2 3 4 5结尾
     
    #include <stdio.h>
    #include <math.h>
    #include <cstring>
    __int64 a[26],b[26];
    void init()
    {
       memset(a,0,sizeof(a));
       memset(b,0,sizeof(b));
       a[2]=0;
       a[3]=104;
       b[2]=0;
       b[3]=32;
    }
    __int64 g(__int64 k ,int b)
    {
        __int64 sum=1;
        for(int i=1;i<=b;i++)
         sum*=k;
         return sum;
    }
    void solve()
    {
           for(int i=4;i<=25;i++)
       {
           __int64 x=0,y=0;
           x+=4*a[i-1];
           y+=(2*a[i-1]-b[i-1]);
           x+=4*9*(g(2,i-1)-2);
           y+=2*(6*(g(2,i-1)-2)+4*(g(2,i-2)-1));
           a[i]=x+y;
           b[i]=y;
       }
    }
    void output()
    {
        for(int i=3;i<=25;i++)
            printf("N=%d: %I64d ",i,a[i]);
    }
    int main()
    {
        //printf("%I64d ",g(2,25));
     init();
     solve();
     output();
     return 0;
    }
  • 相关阅读:
    Anaconda 安装tensorflow(GPU)
    冲量:momentum
    pytorch学习笔记
    python的新特性
    pytorch
    ubuntu16.04 eclipse+pydev 配置
    ubuntu16.04 源码方法安装tensorflow
    django xadmin查找当前用户所在组
    django filter or 多条件查询
    django后台对某些字段设置颜色
  • 原文地址:https://www.cnblogs.com/xianbin7/p/4396264.html
Copyright © 2011-2022 走看看