E - 和風いろはちゃん / Iroha and Haiku(dp+状压)

Problem Statement

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,ZX,Y,Z-Haiku (defined below) in integer sequences.

Consider all integer sequences of length NN whose elements are between 11 and 1010, inclusive. Out of those 10N10N sequences, how many contain an X,Y,ZX,Y,Z-Haiku?

Here, an integer sequence a0,a1,...,aN−1a0,a1,...,aN−1 is said to contain an X,Y,ZX,Y,Z-Haiku if and only if there exist four indices x,y,z,w(0≦x

  • ax+ax+1+...+ay−1=Xax+ax+1+...+ay−1=X
  • ay+ay+1+...+az−1=Yay+ay+1+...+az−1=Y
  • az+az+1+...+aw−1=Zaz+az+1+...+aw−1=Z

Since the answer can be extremely large, print the number modulo 109+7109+7.

Constraints

  • 3≦N≦403≦N≦40
  • 1≦X≦51≦X≦5
  • 1≦Y≦71≦Y≦7
  • 1≦Z≦51≦Z≦5

Input

The input is given from Standard Input in the following format:

NN XX YY ZZ

Output

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


Sample Input 1 Copy

Copy

3 5 7 5

Sample Output 1 Copy

Copy

1

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


Sample Input 2 Copy

Copy

4 5 7 5

Sample Output 2 Copy

Copy

34

Sample Input 3 Copy

Copy

37 4 2 3

Sample Output 3 Copy

Copy

863912418

Sample Input 4 Copy

Copy

40 5 7 5

Sample Output 4 Copy

Copy

562805100

题意:
给你N,X,Y,Z;

N->数的长度(N个数)每个数只能是(0-10),

问你有多少x,y,z,w。满足上面的要求。

d[i][s]表示考虑到第i位,第x+y+z为1然后后面的串为s的二进制表示的数。

转移时枚举第i+1位的情况即可

#include
#define ll long long
const ll mod=1e9+7;
using namespace std;
ll d[45][1<<17];
ll n,x,y,z;
int main()
{
    scanf("%lld%lld%lld%lld",&n,&x,&y,&z);
    ll ans=1;
    for(ll i=1;i<=n;i++)//求出最多有多少种情况10^n。
    {
        ans=1ll*ans*10;
        ans%=mod;
    }
    ll s=(1<

 

你可能感兴趣的:(dp)