钥匙计数之二

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\n",i,a[i]);
}
int main()
{
    //printf("%I64d\n",g(2,25));
 init();
 solve();
 output();
 return 0;
}

hdu 1480的更多相关文章

  1. HDU 5643 King's Game 打表

    King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...

  2. 转载:hdu 题目分类 (侵删)

    转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...

  3. HDU 2048 神、上帝以及老天爷(错排概率问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2048 神.上帝以及老天爷 Time Limit: 2000/1000 MS (Java/Others) ...

  4. HDU 2050(折线分割平面)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2050 折线分割平面 Time Limit: 2000/1000 MS (Java/Others)    ...

  5. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  7. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  8. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  9. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

随机推荐

  1. 【dp】codeforces C. Vladik and Memorable Trip

    http://codeforces.com/contest/811/problem/C [题意] 给定一个自然数序列,在这个序列中找出几个不相交段,使得每个段的异或值之和相加最大. 段的异或值这样定义 ...

  2. MS SQLServer Update语法和实例

    最常用的update语法是: 1 2 UPDATE TABLE_NAME SET column_name1 = VALUE WHRER column_name2 = VALUE 如果我的更新值Valu ...

  3. 一段曲折的copy路程

    cp 的时候出现:-bash: /bin/cp: Argument list too longcp ./*.swf  /www/img/html/xxx/action/ 解决办法:find ./ -n ...

  4. 为什么zookeeper的节点配置的个数必须是奇数个?

    zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的.也就是说如果有2个zookeeper,那么只要有1个死了zookeeper就不能用了,因为1没有过半, ...

  5. iOS 调用系统相册 相机 时,显示中文标题

    解决手机语言已经设置显示中文 在调用系统相册.相机界面 时显示英文问题, 在 info.plist里面添加Localized resources can be mixed YES 表示是否允许应用程序 ...

  6. HDU 6395 分段矩阵快速幂 HDU 6386 建虚点+dij

    http://acm.hdu.edu.cn/showproblem.php?pid=6395 Sequence Time Limit: 4000/2000 MS (Java/Others)    Me ...

  7. struts2中的session使用

    1.1. 如何获取Session 1.1.1. 获取Session的方式 Struts2中获取Session的方式有3种,大家掌握其中任何一种都可以. 通过ActionContext.getConte ...

  8. Java 基础部分知识复习

    面向对象的特征: 继承.封装和多态 封装 : 把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象去操作.对不可信的信息进行隐藏. 继承: 它可以使用现有类的功能,并在无需重新编 ...

  9. Springmvc 前台传递参数到后台需要数据绑定

    我们知道,当提交表单时,controller会把表单元素注入到command类里,但是系统注入的只能是基本类型,如int,char,String.但当我们在command类里需要复杂类型,如Integ ...

  10. 配置 Apache 服务器禁止所有非法域名 访问自己的服务器

    .http2..1以前: 第一种 直接拒绝访问 打开 httpd.conf 文件,将一下配置追加到文件最后. <pre name="code" class="htm ...