题目链接:

http://acm.uestc.edu.cn/#/problem/show/1307

ABCDE

Time Limit: 1000/1000MS (Java/Others)
Memory Limit: 262144/262144KB (Java/Others)
#### 问题描述
> 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 99.
>
> For example, in {8,4,2,1}{8,4,2,1} encoding, 11111111 is 1515, exceed 99, so {8,4,2,1}{8,4,2,1} encoding is BCD but not ABCD. In {2,4,2,1}{2,4,2,1} encoding, any number represented by corresponding binary value won't exceed 99, so {2,4,2,1}{2,4,2,1} encoding is ABCD.
>
> title
>
> Now, let's talk about ABCDE (Awesome Binary-Coded Decimal Extension).
>
> An n-ABCDE is such a encoding that can only represent 00 to nn, and every number from 00 to nn can be represented by one or more binary values. So {2,4,2,1}{2,4,2,1} is a 99-ABCDE and {8,4,2,1}{8,4,2,1} is a 1515-ABCDE as we mentioned above. In addition, {16,8,4,2,1}{16,8,4,2,1} is a 3131-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}{2,4,2,1} encoding is the same with the {1,2,2,4}{1,2,2,4} encoding, but it is different from {2,4,4,1}{2,4,4,1}.
>
> Now, given a number nn, can you tell me how many different nn-ABCDEs?
#### 输入
> There is an integer TT in the first line, indicates the number of test cases.
>
> For each test, the only line contains a integer nn.
>
> 1≤T≤50001≤T≤5000
> 1≤n≤5000
#### 输出
> For each test, output an integer in one line, which is the number of different nn-ABCDEs. As the answer may be too large, output it modulo (109+7)(109+7) (i.e. if the answer is XX, you should output X % (109+7)X % (109+7)).
####样例输入
> 5
> 1
> 2
> 3
> 4
> 5

样例输出

1

1

2

2

4

题意

求子集能够表示1、2、...、n所有数的集合种数。

比如n=5:{1,1,1,1,1},{1,1,1,2},{1,2,2},{1,1,3}总共4种

题解

dp[i][j]表示和为i,且集合里面最大的数为j的总数,则有dp[i][j]=sigma(dp[i-j][k])其中k<=j,j*2-1<=i。 当然这样转移会n3超时,不过我们可以处理出sumv[i][j]=sig(dp[i][k])其中k<=j。然后O(n2)就能跑。

为什么j*2-1<=i?假设我们已知和为s且满足条件的集合数,那么我们考虑再加一个数x,那么这个数肯定要<=s+1,否则s+1就会无法表示!也就是说如果j能够属于和为i的集合里面的最大数,那么必然就有j+j-1<=i。

代码

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<ctime>
#include<vector>
#include<cstdio>
#include<string>
#include<bitset>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
#define X first
#define Y second
#define mkp make_pair
#define lson (o<<1)
#define rson ((o<<1)|1)
#define mid (l+(r-l)/2)
#define sz() size()
#define pb(v) push_back(v)
#define all(o) (o).begin(),(o).end()
#define clr(a,v) memset(a,v,sizeof(a))
#define bug(a) cout<<#a<<" = "<<a<<endl
#define rep(i,a,b) for(int i=a;i<(b);i++)
#define scf scanf
#define prf printf typedef long long LL;
typedef vector<int> VI;
typedef pair<int,int> PII;
typedef vector<pair<int,int> > VPII; const int INF=0x3f3f3f3f;
const LL INFL=0x3f3f3f3f3f3f3f3fLL;
const double eps=1e-8;
const double PI = acos(-1.0); //start---------------------------------------------------------------------- const int maxn=5001;
const int mod=1e9+7; LL dp[maxn][maxn];
void pre(){
clr(dp,0);
dp[1][1]=1;
for(int j=1;j<maxn;j++) dp[1][j]=(dp[1][j-1]+dp[1][j])%mod;
for(int i=2;i<maxn;i++){
for(int j=1;j*2-1<=i;j++)
dp[i][j]=dp[i-j][j];//这里的dp[i-j][j]已经变成是sum[i-j][j]了,但是由于空间比较紧,就没另开
//预处理出前缀和。
for(int j=1;j<maxn;j++)
dp[i][j]=(dp[i][j-1]+dp[i][j])%mod;
}
} int main() {
pre();
int tc,kase=0;
scanf("%d",&tc);
while(tc--){
int x; scf("%d",&x);
prf("%lld\n",dp[x][5000]);
}
return 0;
} //end-----------------------------------------------------------------------

CDOJ ABCDE dp(前缀和优化)的更多相关文章

  1. HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化

    HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...

  2. [Codeforces712D] Memory and Scores(DP+前缀和优化)(不用单调队列)

    [Codeforces712D] Memory and Scores(DP+前缀和优化)(不用单调队列) 题面 两个人玩游戏,共进行t轮,每人每轮从[-k,k]中选出一个数字,将其加到自己的总分中.已 ...

  3. T2988 删除数字【状压Dp+前缀和优化】

    Online Judge:从Topcoder搬过来,具体哪一题不清楚 Label:状压Dp+前缀和优化 题目描述 给定两个数A和N,形成一个长度为N+1的序列,(A,A+1,A+2,...,A+N-1 ...

  4. Codeforces 479E. Riding in a Lift (dp + 前缀和优化)

    题目链接:http://codeforces.com/contest/479/problem/E 题意:         给定一个启示的楼层a,有一个不能去的楼层b,对于你可以去的下一个楼层必须满足你 ...

  5. 2018多校第九场 HDU 6416 (DP+前缀和优化)

    转自:https://blog.csdn.net/CatDsy/article/details/81876341 #include <bits/stdc++.h> using namesp ...

  6. Student's Camp CodeForces - 708E (dp,前缀和优化)

    大意: $n$行$m$列砖, 白天左侧边界每块砖有$p$概率被摧毁, 晚上右侧边界有$p$概率被摧毁, 求最后上下边界连通的概率. 记${dp}_{i,l,r}$为遍历到第$t$行时, 第$t$行砖块 ...

  7. BZOJ 1044: [HAOI2008]木棍分割 DP 前缀和优化

    题目链接 咳咳咳,第一次没大看题解做DP 以前的我应该是这样的 哇咔咔,这tm咋做,不管了,先看个题解,再写代码 终于看懂了,卧槽咋写啊,算了还是抄吧 第一问类似于noip的那个跳房子,随便做 这里重 ...

  8. hihocoder1475 数组分拆【DP+前缀和优化】

    思路: DP[ i ] 代表以 i 结尾的方案数. dp[i] += sum[i] - sum[j - 1] != 0 ? dp[j] : 0 ; 对于100%的数据,满足1<=N<=10 ...

  9. 5.19 省选模拟赛 小B的夏令营 概率 dp 前缀和优化dp

    LINK:小B的夏令营 这道题是以前从没见过的优化dp的方法 不过也在情理之中. 注意读题 千万不要像我这个sb一样 考完连题意都不知道是啥. 一个长方形 要求从上到下联通的概率. 容易发现 K天只是 ...

随机推荐

  1. 用file标签实现多图文件上传预览

    效果图: js 代码: <script> //下面用于多图片上传预览功能 function setImagePreviews(avalue) { var docObj = document ...

  2. Elasticsearch入门和查询语法分析(ik中文分词)

    全文搜索现在已经是很常见的功能了,当然你也可以用mysql加Sphinx实现.但开源的Elasticsearch(简称ES)目前是全文搜索引擎的首选.目前像GitHub.维基百科都使用的是ES,它可以 ...

  3. MongoDB基础教程

    MongoDB 一.下载MongoDB数据库 1.进入MongoDB官网进行下载,网址:https://www.mongodb.com/. 2.下载完成后可进行安装,安装后,并有了MongoDB服务. ...

  4. [上架] iOS 上架更新版本号建议

    iOS 上架一個新版本号,就改个版号数字就好,有什么好说的? 是啊~ 如果上架顺利的话,就没什么好说的,如果被退件,再上传更新时,那版号怎么改? 下面说说我的做法(这只是建议,版号随自己喜好,没有固定 ...

  5. Python面向对象总结及类与正则表达式

    Python3 面向对象 一丶面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 方法:类中定义的函数. 类变 ...

  6. vue相关理论知识

    es6常用语法简介 es是js的规范标准 let 特点: 1.有全局和函数作用域,以及块级作用域(用{}表示块级作用域范围) 2.不会存在变量提升 3.变量不能重复声明 const 特点: 1.有块级 ...

  7. php安装redis拓展

    1. 查看是否安装redis库 查看是否安装redis库了.可以通过下面2种方式查看. phpinfo()是否能输出redis的加载信息 在命令行执行`php -m` 输出gd 2. 安装redis库 ...

  8. XMAPP 的安装与配置

    1.XMAPP简介 1.1.XAMPP(Apache+MySQL/MariaDB+PHP+Perl)   开头的X代表X-OS,代表可以在任何常见操作系统下使用,包括Windows.Mac.Linux ...

  9. 20155319《Java程序设计》实验三(敏捷开发与XP实践)实验报告

    20155319<Java程序设计>实验三(敏捷开发与XP实践)实验报告 一.实验内容及步骤 (一)使用Code菜单 在IDEA中使用工具(Code->Reformate Code) ...

  10. addClass+siblings+removeClass用意:

    $(this).addClass("li_add").siblings().removeClass("li_add").children('.floor2'). ...