T1 数数

【问题描述】

fadbec 很善于数数,⽐如他会数将 a 个红球,b 个黄球,c 个蓝球,d 个绿球排成⼀列,任意相邻不同⾊的数⽬。 现在 R 君不知道 fadbec 数的对不对,想让你也算⼀算。 由于数字⽐较⼤,所以请输出除以 109 + 7 的余数。

【输入格式】

⼀⾏四个正整数 a,b,c,d。

【输出格式】

输出包含⼀个整数,表⽰答案。

【样例输入 1】

1 1 1 2

【样例输出 1】

36

【数据规模及约定】

对于前 30% 的数据,1 ≤ a,b,c,d ≤ 3。 对于前 100% 的数据,1 ≤ a,b,c,d ≤ 30。

这个题纯用组合数学是比较麻烦的,因为插入之后或许原先同种颜色相邻的情况中间插入新颜色,那种情况就合法了,所以不好推。

但是看到这个题的数据范围我们可以想到高维DPqwq。。。。

DP的话每次放入的话可以一个一个地考虑,所以比较方便。。。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std; typedef long long LL;
int a,b,c,d;
const LL mod = 1e9+7;
LL dp[35][35][35][35][4];
int sum(int a,int b,int c,int d,int k){
if(a+b+c+d == 0) return 1;
LL sum = 0;
for(int i = 0;i<4;i++){
if(k!=i) sum+= dp[a][b][c][d][i];
}
return sum%mod;
}
int main(){
//freopen("count.in","r",stdin);
//freopen("count.out","w",stdout);
cin >> a >> b >> c >> d;
int l = a+b+c+d;
for(int i=1;i<=l;i++){
for(int n1=0; n1<=a && n1<=i;n1++){
for(int n2=0;n2<=b && n1+n2 <= i;n2++){
for(int n3=0;n3<=c && n1+n2+n3 <= i;n3++){
int n4 = i-n1-n2-n3;
if(n1>0){
dp[n1][n2][n3][n4][0] = sum(n1-1,n2,n3,n4,0);
}
if(n2>0){
dp[n1][n2][n3][n4][1] = sum(n1,n2-1,n3,n4,1);
}
if(n3>0){
dp[n1][n2][n3][n4][2] = sum(n1,n2,n3-1,n4,2);
}
if(n4>0){
dp[n1][n2][n3][n4][3] = sum(n1,n2,n3,n4-1,3);
}
}
}
}
}
LL ans = sum(a,b,c,d,-1);
cout<<ans<<endl;
return 0;
}

数数(高维DP)的更多相关文章

  1. 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 682  Solved: 364 Description 我们称一 ...

  2. BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]

    3530: [Sdoi2014]数数 题意:\(\le N\)的不含模式串的数字有多少个,\(n=|N| \le 1200\) 考虑数位DP 对于长度\(\le n\)的,普通套路DP\(g[i][j ...

  3. BZOJ_1662_[Usaco2006 Nov]Round Numbers 圆环数_数位DP

    BZOJ_1662_[Usaco2006 Nov]Round Numbers 圆环数_数位DP Description 正如你所知,奶牛们没有手指以至于不能玩“石头剪刀布”来任意地决定例如谁先挤奶的顺 ...

  4. BZOJ_1026_[SCOI2009]windy数_数位DP

    BZOJ_1026_[SCOI2009]windy数_数位DP 题意:windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之 ...

  5. [SDOI2014]数数 --- AC自动机 + 数位DP

    [SDOI2014]数数 题目描述: 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串. 例如当S=(22,333,0233)时,233是幸运数,2333 ...

  6. 【Foreign】数数 [打表][DP]

    数数 Time Limit: 10 Sec  Memory Limit: 128 MB Description Input 仅一行两个整数L,R Output 仅一行一个整数表示答案. Sample ...

  7. [Sdoi2014]数数[数位dp+AC自动机]

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 834  Solved: 434[Submit][Status][ ...

  8. windy数(简单数位DP)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 6306  Solved: 2810[Submit][Sta ...

  9. bzoj 3530: [Sdoi2014]数数 数位dp

    题目 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3223不是幸运数. ...

随机推荐

  1. Tomcat集群---Cluster节点配置

    <!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. className 表示tomcat集群时,之间相互传递信息使用那个类来实现信息之间的传递. cha ...

  2. 调用EF的存储过程报“存储区数据提供程序返回的数据读取器所具有的列数对于所请求的查询不够”问题

    在运用Entity Framework调用存储过程的时候,遇到"调用EF的存储过程报"调用EF的存储过程报“存储区数据提供程序返回的数据读取器所具有的列数对于所请求的查询不够”问题 ...

  3. IE11 - Object doesn't support property or method 'includes'

    IE不支持字符串的includes()方法:可以用indexOf()替换: includes()方法返回true和false; var str = "asdklmn": if(st ...

  4. guestfs-python 手册

    Help on module guestfs: NAME guestfs - Python bindings for libguestfs FILE /usr/lib64/python2.7/site ...

  5. Apache Hive (二)Hive安装

    转自:https://www.cnblogs.com/qingyunzong/p/8708057.html Hive的下载 下载地址http://mirrors.hust.edu.cn/apache/ ...

  6. 微信图片反防盗链 用js不太成熟的解决方式 仅供参考

    $("#imgDiv img").each(function () { var img = $(this); var img_src = img.attr("src&qu ...

  7. 477. Total Hamming Distance总的二进制距离

    [抄题]: The Hamming distance between two integers is the number of positions at which the correspondin ...

  8. 解题报告Best Time to Buy and Sell Stock with Cooldown

    题目 Say you have an array for which the ith element is the price of a given stock on day i. Design an ...

  9. Perl 学习笔记-模块

    1.Perl模块介绍 2个来源, 一个是随Perl发行版本一同打包, 只要安装了Perl就可以使用;  另一种是需要从CPAN上下载,自己安装.   寻找模块之前, 先检查系统上是否已经安装过了,   ...

  10. Visual assint x(转)

    最新破解版:Visual Assist X 10.8.2001 破解版 支持VC2013及以下版本 安装步骤: 1. 双击运行VA_A_Setup2001并安装 2. 双击运行Visual Assis ...