$dp$,组合数。

$dp[i][j]$表示只用数字$i$,$i+1$,$i+2$......,$9$,凑成长度为$j$的并且数字$i$到$9$符合要求的方案数。只要枚举数字$i$用几个就可以转移了。

$dp[i][j] = \sum\limits_{k = a[i]}^n {(dp[i + 1][j - k]} *c[j][k])$,$0$的时候需要特别写一下转移方程,因为$0$不能放在第一位。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std; int n,a[],sum[];
long long c[][],dp[][];
long long mod=1e9+; int main()
{
for(int i=;i<=;i++) c[i][]=c[i][i]=;
for(int i=;i<=;i++)
{
for(int j=;j<i;j++)
{
c[i][j]=(c[i-][j-]+c[i-][j])%mod;
}
} scanf("%d",&n);
for(int i=;i<=;i++) scanf("%d",&a[i]); memset(dp,,sizeof dp); for(int i=a[];i<=n;i++) dp[][i]=; for(int i=;i>=;i--)
{
sum[i]=sum[i+]+a[i];
for(int j=sum[i];j<=n;j++)
{
for(int k=a[i];k<=j;k++)
{
if(i!=) dp[i][j]=(dp[i][j]+dp[i+][j-k]*c[j][k]%mod)%mod;
else
{
if(j->=) dp[i][j]=(dp[i][j]+dp[i+][j-k]*c[j-][k]%mod)%mod;
}
}
}
} /*
for(int i=9;i>=0;i--)
{
cout<<"---- "<<i<<"----";
for(int j=0;j<=n;j++)
{
cout<<dp[i][j]<<"*";
}
cout<<endl;
}
*/
long long ans=;
for(int i=;i<=n;i++) ans=(ans+dp[][i])%mod; printf("%lld\n",ans); return ;
}

CodeForces 213B Numbers的更多相关文章

  1. Codeforces #55D-Beautiful numbers (数位dp)

    D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  2. codeforces Beautiful Numbers

    来源:http://codeforces.com/problemset/problem/1265/B   B. Beautiful Numbers   You are given a permutat ...

  3. CodeForces 128D Numbers 构造

    D. Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...

  4. Codeforces 34C-Page Numbers(set+vector+暴力乱搞)

    C. Page Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  5. [codeforces]Page Numbers <模拟>

    描述: «Bersoft» company is working on a new version of its most popular text editor — Bord 2010. Bord, ...

  6. CodeForces - 83D:Numbers (数学&递归 - min25筛 )

    pro:给定三个整数L,R,P求[L,R]区间的整数有多少个是以P为最小因子的.L,R,P<2e9; sol: 一: 比较快的做法是,用函数的思想递归. 用solve(N,P)表示求1到N有多少 ...

  7. 数位dp整理

    数位dp的思想就在于递归,记录当前的某一个唯一状态,依次递归下去,要注意唯一. 数位dp常设的状态有当前位置,上一数字,是否具有前导零,是否有限制. 1.CodeForces 55DBeautiful ...

  8. [codeforces 55]D. Beautiful numbers

    [codeforces 55]D. Beautiful numbers 试题描述 Volodya is an odd boy and his taste is strange as well. It ...

  9. CodeForces 151B Phone Numbers

     Phone Numbers Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Sub ...

随机推荐

  1. c#编写的基于Socket的异步通信系统

    c#编写的基于Socket的异步通信系统 SanNiuSignal是一个基于异步socket的完全免费DLL:它里面封装了Client,Server以及UDP:有了这个DLL:用户不用去关心心跳:粘包 ...

  2. 【推荐】推荐一本学习ExtJS4的好书《ExtJS江湖》(含pdf电子书和源代码下载地址)

    最近在网上游逛,突然发现了一本介绍ExtJS 4框架的好书,书名叫<ExtJS江湖>,作者是大漠穷秋,个人感觉非常不错,书写得很幽默,很具有可读性,在此推荐给各位. 以下是这本书的介绍: ...

  3. SZU:A66 Plastic Digits

    Description There is a company that makes plastic digits which are primarily put on the front door o ...

  4. ecshop下启用QQ在线服务,并能实时更新QQ在线状态

    按照 http://blog.csdn.net/zurich1979/article/details/9082201 可轻松实现在线客服, 但是使用后发现一个问题,那就是这种情况下在线客服不能根据QQ ...

  5. warfare(最大生成树裸题)

                                                                                                  战争 [问题 ...

  6. android获取存储卡使用情况

    package com.aib.com; import java.io.File; import android.app.Activity; import android.os.Bundle; imp ...

  7. Power Designer导出实体类和NHibernate xml文件

    Power Designer导出实体类和NHibernate xml文件 今天研究了一下通过PowerDesigner生成实体类和NHibernate所需要的xml文件,方法是通过Power Desi ...

  8. 基于Redis的CustomerSessionProvider(二)

    接一的考虑,那么就做Redis的SessionProvider就非常简单了,只考虑整个Session的缓存,主要实现以下两个函数就可以了 public override SessionStateSto ...

  9. BroadcastReceiver基础总结

    BroadcastReceiver基础总结 BroadcastReceiver是Android四大组件之一,主要负责接收系统或其他程序发出的广播,在开发中,通常用做事件驱动的起源,比如开机就要开启一个 ...

  10. asp.net mvc异步查询

    对于asp.net mvc异步查询 如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合m ...