状态压缩。分最后一个槽的值以及当前的配置方案是否可以进行DP。

 /* 1438 */
#include <cstdio>
#include <cstring>
#include <cstdlib> #define MAXN 32 const int MAXS = <<; __int64 dp[MAXN][MAXS][][];
int cnt[<<]; int abs(int x) {
return x< ? -x:x;
} int main() {
int i, j, k, n;
int s;
__int64 ans; memset(cnt, , sizeof(cnt));
for (i=; i<MAXS; ++i)
for (j=; j<; ++j)
if (i & (<<j))
++cnt[i]; memset(dp, , sizeof(dp));
for (i=; i<; ++i)
dp[][<<i][i][] = ; for (n=; n<MAXN; ++n) {
for (i=; i<MAXS; ++i) {
for (j=; j<; ++j) {
for (k=; k<; ++k) {
s = i | (<<j);
dp[n][s][j][] += dp[n-][i][k][];
if (abs(j-k) == ) {
dp[n][s][j][] += dp[n-][i][k][];
} else {
dp[n][s][j][] += dp[n-][i][k][];
}
}
}
}
} for (n=; n<MAXN; ++n) {
ans = ;
for (i=; i<MAXS; ++i) {
if (cnt[i] >= )
ans += dp[n][i][][] + dp[n][i][][] +\
dp[n][i][][] + dp[n][i][][];
}
printf("N=%d: %I64d\n", n, ans);
} return ;
}

【HDOJ】1438 钥匙计数之一的更多相关文章

  1. HDU 1438 钥匙计数之一(状压DP)题解

    思路: 每个槽有4种深度,一共有2^4种状态.然后开4维来保存每一次的状态:dp[ 第几个槽 ][ 当前状态 ][ 末尾深度 ][ 是否符合要求 ]. 代码: #include<cstdio&g ...

  2. HDU-1438 钥匙计数之一

    http://acm.hdu.edu.cn/showproblem.php?pid=1438                                钥匙计数之一 Time Limit: 200 ...

  3. 钥匙计数之一 - HDU 1438(状态压缩打表)

    分析:首先想到每个钥匙的结尾有4种状态,不过题目还需要判断有三种不同的钥匙深度,所以每种深度结尾后有2^4种状态,0000->1111,不过题目还需需要有相邻的钥匙深度大于等于3,所以需要两种不 ...

  4. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

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

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

  6. hdu 1480

    钥匙计数之二 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. 2014上海全国邀请赛题解 HDOJ 5090-5099

    HDOJ 5090 水题.从小到大排序,能够填充达到符合条件的.先填充好.填充之后进行调整. 传送门:pid=5090">点击打开链接 #include <cstdio> ...

  8. 【HDOJ】4986 Little Pony and Alohomora Part I

    递推.设n个盒子的Spell次数为S(n),期望为E(n).当有n个盒子时,可能第n把钥匙在第n个盒子中,此时的Spell次数应该为(n-1)!+S(n-1):当第n把钥匙不在第n个盒子中,混合排列, ...

  9. OC基础15:内存管理和自动引用计数

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...

随机推荐

  1. C#构造函数里的base和this的区别

    用法一: 父类的构造函数总是在子类之前执行的.既先初始化静态构造函数,后初始化子类构造函数. public class BaseCircle { public BaseCircle() { Conso ...

  2. Sql Server 2005 开发版亲測可用下载地址

    sqlserver2005开发版下载地址:http://222.132.81.146/rj/cs_sql_2005_dev_all_dvd.rar建议使用迅雷下载. sql server 2005 开 ...

  3. [Javascript] Grouping and Nesting Console Log Output

    Organize your log output by grouping your logs into collapsable hierarchies using console.group(). ; ...

  4. [转] openjdk和jdk的区别与联系

    使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的openjdk,那么到底什么是openjdk,它与sun jdk有什么关系和区别呢? 历史上的 ...

  5. [转] C++临时变量的生命周期

    http://www.cnblogs.com/catch/p/3251937.html C++中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量. 主要的用途主要有两类: 1) 函数的 ...

  6. 怎样找Android里自带的数据库?

    首先先让它显示出来. 窗口window下的Show View 下的File Explorer(other里), 这时File Explorer窗口 就会显示出来,下一步我们找到data下的data,然 ...

  7. Thinkphp 3.2及以上版本实现支付宝担保交易、即时到账接口类、函数和使用方法

    给客户开发网站时需要用到支付宝在线付款功能,小云到thinkphp网站溜了一圈,代码是有,可是都不怎么全,因此这篇文章诞生了! 本篇文章讲解了三个类的实现,担保交易.即时到账.双功能收款(该功能支付宝 ...

  8. Asp.net 主题

    设定主题: 右击网站,选择添加ASP.NET文件夹,选择主题.系统默认将文件夹命名为App_Themes,我们在这个文件夹下添加外观文件,在.skin后缀的文件中自定义我们想要的主题. 例如: < ...

  9. [转]Java中byte与16进制字符串的互相转换

    Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符, ...

  10. Qt之QCustomPlot绘图(一)配置和第一个例子

    最近一个用Qt开发的项目需要绘制坐标曲线,我在老师的指点下使用了QCustomPlot这个插件,使用方法简单,功能还算不错. 可是在网上找了很多资料和博文都只是将官方提供的例子演示一遍,没有系统全面的 ...