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设备树文件结构与解析深度分析(2) 【转】
转自:https://mp.weixin.qq.com/s/WPZSElF3OQPMGqdoldm07A 作者简介 宋牧春,linux内核爱好者,喜欢阅读各种开源代码(uboot.linux.ucos ...
- 去除\ufeff的解决方法,python语言
语言:python 编程工具:pycharm 硬件环境:win10 64位 读取文件过程中发现一个问题:已有记事本文件(非空),转码 UTF-8,复制到pycharm中,在开始位置打印结果会出现 \ ...
- 利用pycharm运行scrapy以及scrapy的配置
1.安装两个whl文件 https://pypi.python.org/pypi/Twisted 下载Twisted的whl文件 https://pypi.python.org/pypi/Scrapy ...
- Oracle Spatial操作geometry方法
Oracle Spatial中SDO_GEOMETRY类型: CREATE TYPE SDO_GEOMETRY AS OBJECT( SDO_GTYPE NUMBER,--几何类型,如点线面 SDO_ ...
- popstate实现history路由拦截,监听页面返回事件
1.当活动历史记录条目更改时,将触发popstate事件. 如果被激活的历史记录条目是通过对history.pushState()的调用创建的, 或者受到对history.replaceState() ...
- HDU 1358 Period(KMP计算周期)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1358 题目大意:给你一串字符串,判断字符串的前缀是否由某些字符串多次重复而构成. 也就是,从第1个字母 ...
- appium---【Mac】appium-doctor提示WARN:“fbsimctl cannot be found”解决方案
报错提示截图如下: 解决方案: brew tap facebook/fb brew install fbsimctl --HEAD 执行完命令重新运营appium-doctor即可看到成功已安装此包:
- 清除(设置)eclipse的workspace记录
在eclipse文件夹中找到这个文件即可: //eclipse/configuration/.settings/org.eclipse.ui.ide.prefs 用记事本打开这个文件.如果你是第一次打 ...
- int类中的方法
我们知道在python中,一切对象都是类,对象的方法都封装在类中,现在来探讨一下int类中的方法: 我们可以通过help(int)和dir(int)来查看int类中都封装了那些方法: 1.bi ...
- logstash通过redis收集日志
(1)部署redis 1丶安装redis yum install epel-release -y yum install redis -y 2丶修改配置文件 #vim /etc/redis.conf ...