标签: 状态压缩DP


题目描述

Haiku is a short form of Japanese poetry. A Haiku consists of three phrases with 5, 7 and 5 syllables, in this order.
Iroha is looking for X,Y,Z-Haiku (defined below) in integer sequences.
Consider all integer sequences of length N whose elements are between 1 and 10, inclusive. Out of those 10N sequences, how many contain an X,Y,Z-Haiku?
Here, an integer sequence a0,a1,…,aN−1 is said to contain an X,Y,Z-Haiku if and only if there exist four indices x,y,z,w(0≤x<y<z<w≤N) such that all of the following are satisfied:
ax+ax+1+…+ay−1=X
ay+ay+1+…+az−1=Y
az+az+1+…+aw−1=Z
Since the answer can be extremely large, print the number modulo 109+7.

Constraints

3≤N≤40
1≤X≤5
1≤Y≤7
1≤Z≤5

输入

The input is given from Standard Input in the following format:
N X Y Z

输出

Print the number of the sequences that contain an X,Y,Z-Haiku, modulo 109+7.

样例输入

3 5 7 5

样例输出

1

提示

Here, the only sequence that contains a 5,7,5-Haiku is [5,7,5].

分析

  • 用dp[i][j]来表示,长度为i的数组,最后几个数字的状态为j,且这个数组中不存在连续的一些数的和为X,Y,Z的方法数.
  • 状态j是这么定义的,把数组中的元素的二进制表示按照顺序串联起来,取后X+Y+Z位
  • 如果倒数第Z位,倒数第Y+Z位,倒数第X+Y+Z位都是1,那么就满足了题目中所说的条件.

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll MOD=1e9+7;
int n,a,b,c;
ll dp[42][1<<17];
int main(int argc, char const *argv[])
{scanf("%d%d%d%d", &n,&a,&b,&c);dp[0][0]=1;int base=(1<<(c-1))+(1<<(b+c-1))+(1<<(a+b+c-1));for (int i = 0; i < n; ++i){for (int j = 0; j < (1<<(a+b+c)); ++j){for (int k = 0; k < 10; ++k){int x=(j<<(k+1))+(1<<k);x&=((1<<(a+b+c))-1);if((x&base)!=base){dp[i+1][x]+=dp[i][j];dp[i+1][x]%=MOD;}}}}ll ans=1;for (int i = 0; i < n; ++i){ans=ans*10%MOD;}for (int i = 0; i < (1<<(a+b+c)); ++i){ans=(ans-dp[n][i])%MOD;}ans=(ans+MOD)%MOD;printf("%lld\n", ans);return 0;
}

转载于:https://www.cnblogs.com/sciorz/p/9058610.html

Iroha and Haiku II相关推荐

  1. Iroha and Haiku I

    问题 : Iroha and Haiku I 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Iroha loves Haiku. Haiku is a short form of Jap ...

  2. AtCoder Regular Contest 058

    这个应该是第一场有英文的atcoder吧??不过题解却没有英文的... 从前往后慢慢做... C こだわり者いろはちゃん / Iroha's Obsession 数据范围这么小,直接暴力 #inclu ...

  3. AtCoder Beginner Contest 265笔记

    目录 A - Apple 题目描述 题目分析 题目代码 B - Explore 题目描述 题目分析 题目代码 C - Belt Conveyor 题目描述 题目分析 题目代码 D - Iroha an ...

  4. 剑指offer:面试题32 - II. 从上到下打印二叉树 II

    题目:从上到下打印二叉树 II 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3    / \ ...

  5. 剑指offer:面试题14- II. 剪绳子 II

    题目:剪绳子 II 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] .请问 k[0]* ...

  6. 递归/回溯:Combination Sum II数组之和

    问题如下: 已知一组数(其中有重复元素),求这组数可以组成的所有子集中,子 集中的各个元素和为整数target的子集,结果中无重复的子集. 例如: nums[] = [10, 1, 2, 7, 6, ...

  7. 递归/回溯:Subsets II求子集(有重复元素)

    上一篇描述了针对数组中没有重复元素进行子集的求取过程递归/回溯:subsets求子集 但是当出现如下数组时: 例如: nums[] = [2, 1, 2, 2] 结果为: [[], [1], [1,2 ...

  8. HDU 2080 夹角有多大II

    夹角有多大II Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  9. 了解ES6 The Dope Way Part II:Arrow功能和'this'关键字

    by Mariya Diminsky 通过玛丽亚·迪明斯基(Mariya Diminsky) 了解ES6 The Dope Way Part II:Arrow功能和'this'关键字 (Learn E ...

  10. Leetcode 213.大家劫舍II

    打家劫舍II 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗系统,如果两 ...

最新文章

  1. 这些知名制药跨国企业都实施了SAP系统
  2. JavaScript基础知识(函数)
  3. c++ocx交互检测弹框_吉利几何C:2022杭州亚运会移动“明信片”!
  4. 去年领了163亿薪资的马斯克,刚推出智能召唤功能就被吐槽:遇到人开的车就蒙圈...
  5. JBOSS优化--比较有用的生产环境配置
  6. 关于win10更新后谷歌浏览器打开卡慢或者无法上网的问题解决
  7. Chrome 自动填充的表单是淡黄色的背景怎么办!
  8. js isinteger_在JavaScript中使用示例使用Number isInteger()方法
  9. ubuntu 下mysql的常用命令
  10. 人工蜂群算法python_教程 | 用人工蜂群算法求解k-分区聚类问题
  11. FLUSH TABLES WITH READ LOCK 和 LOCK TABLES比较
  12. 少女风vue组件库制作全攻略~~
  13. 19条优秀的编码原则
  14. 图像批处理高斯滤波降噪+峰值信噪比计算
  15. 芝麻信用接口 java_java 对接芝麻信用 -用芝麻私钥解密错误
  16. Godaddy上的域名如何取消自动续费?
  17. MATLAB:读取nc文件并将nc文件转为tif文件输出
  18. 报错:WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after con
  19. 「斜」italics() //使用斜体显示字符串 20140817 ①文本处理
  20. EXCEL二级数据有效性的设置问题

热门文章

  1. 垃圾收集器和内存分配
  2. [渝粤教育] 泉州师范学院 弦管传奇 古乐南音 参考 资料
  3. ubuntu16.04下ROS操作系统学习笔记(五)gazebo物理仿真环境搭建、加载服务端模型数据减少报错
  4. 基于协同过滤,NMF和Baseline的推荐算法
  5. centos 7 x86_64上安装staruml2.8.0
  6. 微信小程序生成海报分享:canvas绘制文字溢出如何换行
  7. CODE[VS]1160 蛇形矩阵
  8. [转]C# 中的常用正则表达式总结
  9. msp430入门编程07
  10. Flash 二进制传图片到后台Java服务器接收