CDOJ 1307 ABCDE 前缀和优化dp
ABCDE
题目连接:
http://acm.uestc.edu.cn/#/problem/show/1307
Description
Binary-coded decimal (BCD) is a kind of binary encodings of decimal numbers where each decimal digit is represented by a fixed number of bits.
Awesome Binary-Coded Decimal (ABCD) is, under the above conditions, any number represented by corresponding binary value won't exceed \(9\).
For example, in \(\\{8,4,2,1\\}\) encoding, \(1111\) is \(15\), exceed \(9\), so \(\\{8,4,2,1\\}\) encoding is BCD but not ABCD. In \(\\{2,4,2,1\\}\) encoding, any number represented by corresponding binary value won't exceed \(9\), so \(\\{2,4,2,1\\}\) encoding is ABCD.
Now, let's talk about ABCDE (Awesome Binary-Coded Decimal Extension).
An n-ABCDE is such a encoding that can only represent \(0\) to \(n\), and every number from \(0\) to \(n\) can be represented by one or more binary values. So \(\\{2,4,2,1\\}\) is a \(9\)-ABCDE and \(\\{8,4,2,1\\}\) is a \(15\)-ABCDE as we mentioned above. In addition, \(\\{16,8,4,2,1\\}\) is a \(31\)-ABCDE.
Two encoding will be considered different if they have different length, or they have different number set, with the number of occurrence of each number considered. More precisely, two different coding will have such a number that occur different times.
So, \(\\{2,4,2,1\\}\) encoding is the same with the \(\\{1,2,2,4\\}\) encoding, but it is different from \(\\{2,4,4,1\\}\).
Now, given a number \(n\), can you tell me how many different \(n\)-ABCDEs?
Input
There is an integer \(T\) in the first line, indicates the number of test cases.
For each test, the only line contains a integer \(n\).
\(1\leq T\leq 5000\)
\(1\leq n \leq 5000\)
Output
For each test, output an integer in one line, which is the number of different \(n\)-ABCDEs. As the answer may be too large, output it modulo \((10^9+7)\) (i.e. if the answer is \(X\), you should output \(X\ \%\ (10^9+7)\)).
Sample Input
5
1
2
3
4
5
Sample Output
1
1
2
2
4
Hint
题意
在数电中,有一种码,类似BCD码这种玩意儿
第i位如果为1的话,那么ans+=a[i],a[i]是这一位的位权
然后现在给你一个n,问你一共有多少种码可以表示1~n的所有数呢?
1,1,2和2,1,1视作一样。
题解:
首先考虑这个东西,如果不视作一样的话,就很简单了
dp[i]表示当前和为i的方案数,显然这个玩意儿能够一直转移到2i-1去。
由于视作一样,那么我们只要维护一个当前的最大值就好了,保证这个序列是递增的,这样就都不会一样了。
dp[i][j]表示现在和为i,最大值为j的方案数有多少。
这个转移发现可以用前缀和优化,这样就是n^2的了。
代码
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
const int maxn = 5005;
int dp[maxn][maxn];
int sum[maxn][maxn];
void init()
{
dp[0][0]=1;
for(int i=0;i<=5000;i++)sum[0][i]=1;
for(int i=1;i<=5000;i++)
{
for(int j=1;j<=5000;j++)
if(j*2-1<=i)dp[i][j]=(dp[i][j]+sum[i-j][j])%mod;
sum[i][0]=dp[i][0];
for(int j=1;j<=5000;j++)
sum[i][j]=(sum[i][j-1]+dp[i][j])%mod;
}
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
printf("%d\n",sum[n][5000]);
}
}
CDOJ 1307 ABCDE 前缀和优化dp的更多相关文章
- LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP
题目:https://loj.ac/problem/6089 对于 i <= √n ,设 f[i][j] 表示前 i 种,体积为 j 的方案数,那么 f[i][j] = ∑(1 <= k ...
- P5241 序列(滚动数组+前缀和优化dp)
P5241 序列 挺神仙的一题 看看除了dp好像没什么其他办法了 想着怎么构个具体的图出来,然鹅不太现实. 于是我们想办法用几个参数来表示dp数组 加了几条边肯定要的吧,于是加个参数$i$表示已加了$ ...
- bzoj 1044 [HAOI2008]木棍分割——前缀和优化dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1044 前缀和优化. 但开成long long会T.(仔细一看不用开long long) #i ...
- bzoj 3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛——前缀和优化dp / 排列组合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398 好简单呀.而且是自己想出来的. dp[ i ]表示最后一个牡牛在 i 的方案数. 当前 ...
- bzoj2431: [HAOI2009]逆序对数列(前缀和优化dp)
2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 2312 Solved: 1330[Submit][Stat ...
- CF601C Kleofáš and the n-thlon(期望+前缀和优化dp)
传送门 解题思路 要求这个人的排名,我们可以先求出某个人比他排名靠前的概率,然后再乘上\(m-1\)即为答案.求某个人比他排名靠前可以用\(dp\),设\(f[i][j]\)表示前\(i\)场比赛某人 ...
- 5.19 省选模拟赛 小B的夏令营 概率 dp 前缀和优化dp
LINK:小B的夏令营 这道题是以前从没见过的优化dp的方法 不过也在情理之中. 注意读题 千万不要像我这个sb一样 考完连题意都不知道是啥. 一个长方形 要求从上到下联通的概率. 容易发现 K天只是 ...
- Codeforces Round #274 (Div. 1) C. Riding in a Lift 前缀和优化dp
C. Riding in a Lift Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/480/pr ...
- Topcoder 15405 - PrettyLiar(可删除背包+前缀和优化 dp)
题面传送门 题意: 给出两个长度为 \(n\) 的数组 \(a,b\) 和一个整数 \(s\). 你可以任意重排数组 \(a,b\),总共 \((n!)^2\) 种方案. 现在又两个人 A,B 来玩游 ...
随机推荐
- Linux sqlite3基本命令
简介sqlite3一款主要用于嵌入式的轻量级数据库,本文旨在为熟悉sqlite3基本命令提供技术文档. 备注:本文所有操作均在root用户下进行. 1.安装sqlite3 ubuntu下安装sqlit ...
- 大数据系列之Kafka安装
先简单说下安装kafka的流程..(可配置多个zookeeper,这篇文只说一个zookeeper场景) 1.环境配置:jdk1.7+ (LZ用的是jdk1.8) 2.资料准备:下载 kafka_2. ...
- Mac 终端自动补全忽略大小写
打开终端,输入:nano .inputrc 在里面粘贴上以下语句: set completion-ignore-case onset show-all-if-ambiguous onTAB: menu ...
- 函数参数 f_arg, *args, **kwargs
当需要给函数传参时,可以通过运用不同的形参来传递,达到参数不同的使用目的. 简单来说:f_arg就是传递的第一个参数,类似于C++中的普通参数: *args 传递的是一个参数的list: **kwar ...
- Eloquent中一些其他的create方法
firstOrCreate/ firstOrNew# 还有两种其它方法,你可以用来通过属性批量赋值创建你的模型:firstOrCreate 和firstOrNew.firstOrCreate 方法将会 ...
- SP 页面缓存以及清除缓存
JSP 页面缓存以及清除缓存 一.概述 缓存的思想可以应用在软件分层的各个层面.它是一种内部机制,对外界而言,是不可感知的. 数据库本身有缓存,持久层也可以缓存.(比如:hibernate,还分1级和 ...
- hdu 1850(尼姆博弈)
Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32 ...
- linux下设置opencv环境变量
一.安装opencv(这里不再讲述) 二.添加库路径(创建opencv.conf文件) 输入命令:vi /etc/ld.so.conf.d/opencv.conf 输入/usr/local/lib,并 ...
- fastdfs5.11+centos7.2 按照部署(二)【转载】
https://files.cnblogs.com/files/xiaojf/nginx-1.12.0.tar.gz https://files.cnblogs.com/files/xiaojf/li ...
- day6 random随机数模块
random 我们经常看到网站的随机验证码,这些都是由随机数生成的,因此我们需要了解一下随机数的模块.如何生成随机数. random 生成随机数 random.random() 生成0- ...