状态压缩。分最后一个槽的值以及当前的配置方案是否可以进行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. 基于redis 内存数据库简单使用

    在ecplise中使用内存数据的客端户,前提要准备要下载两个jar包 commons-pool2-2.0.jar jedis-2.4.2.jar 前提准备做好了,那我们就开启redis的服务,打开一个 ...

  2. iOS 下的相册与图片处理

    需求 很多公司项目中都会使用到相册,以及相机,保存图片,从相册中选取图片等等操作.本文将详细介绍该功能如何实现优化,以及使用一些优秀的第三方库来辅助完成我们的需求. photos framework ...

  3. Java基础知识强化之集合框架笔记10:Collection集合使用的步骤

    集合使用的步骤: (1)创建集合对象 (2)创建元素对象 (3)把元素添加到集合 (4)遍历集合:       • 通过集合对象获取迭代器对象 • 通过迭代器对象的hasnext()方法判断是否有元素 ...

  4. Android中实现跨app之间数据的暴露与接收

    例如一个小项目:实现单词本的添加单词等功能 功能:不同的方式实现跨app之间数据的暴露与接收 暴露端app:实现单词的添加(Word.Translate),增删改查: 接收端app:模糊查询,得到暴露 ...

  5. ASP.NET-FineUI开发实践-11

    我用实例项目写了个子父页面传值,算是比较灵活的写法,可以把js提取出来写成包,然后调用,我先一步一步写,为有困难的朋友打个样. 先画个页面: 上面是个查询用的表单,底下是表格,内存分页,用到了VBox ...

  6. OJ常见问题及必须认识的对拍处理水题

    HDUOJ: 常见问题及解答 Q: Online Judge(以下简称OJ)支持哪些语言? A: 目前为止,HDOJ支持C.C++.Pascal和Java四种语言. Q: 有什么条件判断我的程序是在O ...

  7. struts2学生信息管理系统篇章③

    package com.java1234.util; public class PageUtil { //传进来四个参数,tagetUtil是跳转链接的头部,totalNum是总个数,currentP ...

  8. for update被锁定解锁

     查找被锁定的表,用户,session:SELECT object_name, machine, s.sid, s.serial#FROM gv$locked_object l, dba_object ...

  9. javascript之typeof、constructor、instanceof

    ref: http://jingyan.baidu.com/article/29697b912f9939ab20de3c8c.html

  10. 从零开始学java(小游戏 石头剪刀布)

    Game.java package com.java;import java.util.Scanner;public class Game {        private Player player ...