NKOJ 1725 数字(数位dp)
P1725数字
问题描述
给出一个整数n和一个数组a。数组a中包含十个整数,编号0到9。
你的任务是统计满足下列条件的正整数的个数:
1.该正整数的长度不能超过n位;
2.该正整数的最高位不能是0;
3.数字i(0<=i<=9)在该正整数中至少出现a[i]次。
输入格式
第一行一个整数n(1<=n<=100)。
第二行,10个空格间隔的整数,表示a[0],a[1]…a[9]里面存的数字
输出格式
一行,一个整数,表示满足条件的数字的个数,结果可能很大,输出与1000000007取模后的结果。
样例输入1:
1
0 0 0 0 0 0 0 0 0 1
样例输入2:
2
1 1 0 0 0 0 0 0 0 0
样例输入3:
3
1 1 0 0 0 0 0 0 0 0
样例输入1:
1
样例输入2:
1
样例输入3:
36
用F[i][j]F[i][j]表示用数字[j,9][j,9]构成长度为ii的数字的方案数。
递推方程:F[i][j]=∑F[i−k][j+1]∗CkiF[i][j]=\sum F[i-k][j+1]*C_{i}^{k}
意味着在ii个位置中放kk个数字jj,这样就保证了满足题目条件,然后剩下的位置上放[j+1,9][j+1,9]的排列方式就是F[i−k][j+1]F[i-k][j+1]
关于00需要特殊讨论,因为00不能放首位,因此有F[i][0]=∑F[i−k][1]∗Cki−1F[i][0]=\sum F[i-k][1]*C_{i-1}^{k}
代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#define N 105
#define ll long long
using namespace std;
ll n,C[N][N],mod=1000000007,a[N],F[N][10],ans;
int main()
{
ll i,j,k;
scanf("%lld",&n);
for(i=0;i<=9;i++)scanf("%lld",&a[i]); for(i=0;i<=n;i++)C[i][0]=1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;//预处理组合数 for(i=a[9];i<=n;i++)F[i][9]=1;//赋初值 for(j=8;j>=1;j--)
for(i=a[j];i<=n;i++)
for(k=a[j];k<=i;k++)F[i][j]=(F[i][j]+F[i-k][j+1]*C[i][k])%mod; for(i=a[0];i<=n;i++)
for(k=a[0];k<=i;k++)
if(i>0)F[i][0]=(F[i][0]+F[i-k][1]*C[i-1][k])%mod; for(i=1;i<=n;i++)ans=(ans+F[i][0])%mod;
cout<<ans;
}
NKOJ 1725 数字(数位dp)相关推荐
- Loj #6274. 数字 数位dp + 去重
传送门 文章目录 题意: 思路: 题意: 思路: 考虑数位dpdpdp,设计状态f[pos][flag1][flag2][flag3][flag4]f[pos][flag1][flag2][flag3 ...
- 小D的一串数字 (数位DP做法)
Problem Description 小D在纸上随便写了两串数字,"23333333","0123456789".第一个串中含有7个重复的相邻的数字,第二个串 ...
- 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 2774 Solved: 1230 [Submit ...
- 数位dp(求1-n中数字1出现的个数)
题意:求1-n的n个数字中1出现的个数. 解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不能够任意取,true为没降,true为 ...
- bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)
1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...
- bzoj1833: [ZJOI2010]count 数字计数USACO37 Cow Queueing 数数的梦(数位DP)
难受啊,怎么又遇到我不会的题了(捂脸) 如题,这是一道数位DP,随便找了个博客居然就是我们大YZ的--果然nb,然后就是改改模版++注释就好的了,直接看注释吧,就是用1~B - 1~A-1而已,枚举全 ...
- mysql dp.cal 显示汉子_计算1到N中各个数字出现的次数 --数位DP
题意:给定一个数n,问从1到n中,0~9这10个数字分别出现了多少次.比如366这个数,3出现了1次,6出现了2次. 题解:<剑指offer>P174:<编程之美>P132 都 ...
- 51Nod-1009 数字1的数量【数位DP+记忆化搜索】
1009 数字1的数量 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. ...
- 牛客小白月赛8: E. 诡异数字(数位DP)
链接:https://www.nowcoder.com/acm/contest/214/E 来源:牛客网 题目描述 有一天clccle在家里玩手机,突然手机上出现了一个诡异的黑影,眼里闪烁着白光,发出 ...
最新文章
- pandas内置数据集_pandas内置数据集_Pandas中的示例数据集
- 线程创建后,立刻调用CloseHandle的原因
- Leetcode 107. 二叉树的层次遍历 II 解题思路及C++实现
- C++ int转string的几种方法比较
- coco creator编辑动画坑之拖图片
- 开源开放 | 开源大学在线实践数据集及知识图谱MOOPer(CCKS2021)
- ggplot2绘图入门系列之四:再说散点图
- 【LeetCode笔记】53. 最大子序和(Java、动态规划)
- 32 位的有符号整数_leetcode 7 整数反转
- python中0、1、True、False、if条件
- stm32f1系列单片机实战应用
- python knnmatch_opencv python 特征匹配
- 数据库基础 MySQL
- 深度学习head、neck、backbone三个术语分别是指什么?
- 【内核】进程切换 switch_to 与 __switch_to
- 20191221每日一句
- Windows环境下hadoop安装和配置详细步骤
- C语言表白流星(末尾附加下载地址)
- 动作捕捉系统FOHEART·MAGIC
- kettle日志解析_Kettle运行日志记录
热门文章
- 如何正确可视化RAW(ARW,DNG,raw等格式)图像?
- ATEC倒计时17天 | 港版支付宝AlipayHK加持的香港“无现金”生活(赠门票)
- 计算机excel二级试题及答案,(新)计算机(Excel表格处理)二级考试试题及答案.docx...
- c语言某市出租车收费标准如下 3km以内,出租车起步价8元,3km后每千米另加1.2元,小明乘坐出租车行驶x(x3)km,则需要付______元. - 作业在线问答...
- 三相桥式全控整流电路simulink仿真_可控硅整流器如何实现整流调压的?
- 虚拟机大数据实训项目
- 如何做好原始记录,需要特别注意的四个方面
- linux怎么导出dmp文件怎么打开,Linux开发实用工具之详解coredump-dmp文件怎么打开...
- 沃通免费ssl服务器证书,新版《沃通免费SSL证书申请指南》
- Espressif-IDE ESP32 LED Flash 闪烁工程的创建