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. 关于IP4上WIFI设置静态IP的一点经验

    一开始我设置IP4的WIFI的"静态"IP地址后,又查看了一下"BootP"或者"DHCP"选项,然后保存退出(关键错误,后有说明),再进W ...

  2. shell编程——变量子串的常用操作

    ${#字符串} 返回字符串的长度 [root@localhost ~]# a=length [root@localhost ~]# echo ${#a} 6 ${字符串:位置x} 从位置x开始往后截取 ...

  3. shell编程——内部变量

    常用的内部变量有:echo, eval, exec, export, readonly, read, shift, wait, exit 和 点(.) echo:将变量名指定的变量显示到标准输出 [r ...

  4. js 操作数组的一些方法

    1.从数组中获取最大的数 function getMaxfromarr(arr) { var lasti = 0; for (var i = 0; i < arr.length; i++) { ...

  5. 简单HttpClientUtils工具类

    package com.zy.utils; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; import o ...

  6. 【SPOJ - SUBLEX】Lexicographical Substring Search 【后缀自动机+dp】

    题意 给出一个字符串和q个询问,每个询问给出一个整数k,输出第k大得子串. 分析 建后缀自动机,利用匹配边来解决.设d[v]为从状态v开始有多少不同的路径.这个显然是可以递推出来的.然后对于每个询问, ...

  7. 34. Search for a Range (Array; Divide-and-Conquer)

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...

  8. OSG QT

    https://blog.csdn.net/a_Treasure/article/details/82152245 https://www.bbsmax.com/A/kPzOQ4oo5x/ https ...

  9. socket,TCP/IP的理解(转)

    TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间 ...

  10. catkin_make与gtest出现冲突的问题与解决

    gtest是测试时调用的,把测试禁止掉试试 catkin_make --pkg pkgname -DCATKIN_ENABLE_TESTING=0