testB

输入文件: testB.in  输出文件testB.out 时限3000ms

问题描述:

定义这样一个序列(a1,b1),(a2,b2),…,(ak,bk)如果这个序列是方序列的话必须满足下面两个条件:

(1)1<=a1<=b1<a2<=b2<….<ak<=bk<=n 。其中n是给定的正整数。

(2)b1-a1,b2-a2,….,bk-ak两两互不相同。

现在方老师想知道给定n的情况下有多少种不同的长度为k的方序列。

答案取模10^9+7

输入描述:

第一行一个数t表示有t组测试数据。(t<=2*10^5)

第二行至第t+1行每行两个数n和k。(1<=k<=1000 , 1<=n<=1000)

输出描述:

一共t行,每一行表示一个答案。

样例输入:

6
1 1
2 1
2 2
3 1
3 2
3 3

样例输出:

1
3
0
6
2
0

经过观察,k不可能大于50,将(a[i],b[i])看做一个区间,原题转化为选k各不同的正整数,使其总和<=n。

dp[i][j]表示选到第i个数,和为j的方案个数。对于dp中每一种合法方案,通过组合数算出答案。

这道题难点在于多次dp的使用,越界的处理等

总结一点经验:当在较大数据下,你的答案与标答有个位数的差别时,有以下两种可能:1、数组小范围越界,2、你将1000000007打成了1000000009

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define PROB "testB"
#ifdef unix
#define LL "%lld"
#else
#define LL "%I64d"
#endif
#define MAXN 1002
#define VAL1 1000000007
//define deal(x,y) x+=y;if (x>=VAL1)x%=VAL1;
typedef unsigned long long qword;
qword dp[MAXN+][];//x表示区间和,y表示个数,dp表示区间长度组合数,已省略第一维
qword dp2[MAXN+][];//x表示总和,y表示个数,dp表示答案
qword fact[MAXN+];
qword c[MAXN+][MAXN+];
int n;
inline void deal(qword &x,qword y)
{
x+=y;
if (x>=VAL1)x%=VAL1;
}
void init()
{
int i,j,k;
//cout<<"a1"<<endl;
fact[]=;
for (i=;i<=MAXN;i++)fact[i]=(fact[i-]*i)%VAL1;
c[][]=;
for (i=;i<=MAXN;i++)
{
for (j=;j<=i;j++)
{
c[i][j]=(((j)?c[i-][j-]:)+c[i-][j])%VAL1;
}
}
dp[][]=dp[][]=;
//cout<<"a2"<<endl;
for (k=;k<=MAXN;k++)
{
for (i=MAXN-;i>=;i--)
{
for (j=;j>=;j--)
{
if (dp[i][j]&&i+k<=MAXN)
{
deal(dp[i+k][j+],dp[i][j]);
}
}
}
}
//cout<<"a3"<<endl;
for (i=;i<=MAXN;i++)
{
for (j=;j<=;j++)
{
dp2[i][j]=;
for (k=;k<=i-j;k++)
{
if (j++i-j-k->=i-j-k)
deal(dp2[i][j],dp[k][j]*fact[j]%VAL1*c[(j+)+(i-j-k)-][i-j-k]%VAL1);
}
}
}
}
int main()
{
//freopen(PROB".in","r",stdin);
//freopen(PROB".out","w",stdout);
init();
qword ans;
int m,x,y;
scanf("%d",&m);
while (m--)
{
scanf("%d%d",&x,&y);
if (y>)printf("0\n");else printf(LL"\n",dp2[x][y]);
}
}

Contest 20140708 testB dp 组合数的更多相关文章

  1. Andrew Stankevich's Contest (21) J dp+组合数

    坑爹的,,组合数模板,,, 6132 njczy2010 1412 Accepted 5572 MS 50620 KB C++ 1844 B 2014-10-02 21:41:15 J - 2-3 T ...

  2. noj 2033 一页书的书 [ dp + 组合数 ]

    传送门 一页书的书 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 53            测试通过 : 1 ...

  3. 【区间dp+组合数+数学期望】Expression

    https://www.bnuoj.com/v3/contest_show.php?cid=9148#problem/I [题意] 给定n个操作数和n-1个操作符,组成一个数学式子.每次可以选择两个相 ...

  4. 【题解】CF1056F Write the Contest(三分+贪心+DP)

    [题解]CF1056F Write the Contest(三分+贪心+DP) 最优化问题的三个解决方法都套在一个题里了,真牛逼 最优解应该是怎样的,一定存在一种最优解是先完成了耗时长的任务再干别的( ...

  5. 2019 牛客暑期多校 G subsequence 1 (dp+组合数)

    题目:https://ac.nowcoder.com/acm/contest/885/G 题意:给你两个串,要求上面哪个串的子序列的值大于下面这个串的值的序列个数,不含前导零 思路:我们很容易就可以看 ...

  6. hdu----(5045)Contest(数位dp)

    Contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  7. hdu 3944 DP? 组合数取模(Lucas定理+预处理+帕斯卡公式优化)

    DP? Problem Description Figure 1 shows the Yang Hui Triangle. We number the row from top to bottom 0 ...

  8. Contest 20140708 testA && testC

    testA 输入文件: testA.in  输出文件testA.out 时限2000ms 问题描述: 如果一个数化为一个二进制数之后(没有前导0),0的个数>=1的个数.那么这个数就是方数. E ...

  9. Contest20140705 testB DP

    testB 输入文件: testB.in 输出文件testB.out 时限2000ms 问题描述: 方师傅有两个由数字组成的串 a1,a2,⋯,an 和 b1,b2,⋯,bm.有一天,方师傅感到十分无 ...

随机推荐

  1. Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解

    一.概念简介: Redis: Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis, ...

  2. [TypeScript ] What Happens to Compiled Interfaces

    This lesson covers using your first TypeScript Interface and what happens to the Interface when it i ...

  3. QuaZip实现多文件打包

    项目需求: 在Goldenfarm客户端中当用户选择了本地场景文件,并进行本地场景文件分析后会产生分析结果,分析结果主要包括:贴图纹理.可渲染层等,其中贴图纹理指出了在场景文件中使用到的贴图或其它文件 ...

  4. SCIP读书笔记(1)

    这书也算是必修吧,尤其是我这种非科班人员,还是应该抽时间尽量学习一下.大致翻过一遍,习题非常多,尽力吧. ##构造过程抽象 * 为了表述认知,每种语言都提供了三种机制:基本元素:组合方式:抽象方法. ...

  5. C# addin 开发心得记录

    1.环境 2012 新建项目-2010外接程序 2.新建项-功能区  创建菜单等 发布: 1.InstallShield  2015 2.打包 说明按地址-https://msdn.microsoft ...

  6. Java代码操作HDFS(在/user/root/下面創建目錄)

    1.创建HDFS目录并打成jar包 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache.h ...

  7. jsp中的注释

    jsp中有各种针对不同类型语言的注释,值得注意的是对于标签 <jsp:include/>是需要使用jsp注释"<%----%>",  (不能是<!-- ...

  8. 关于wordpress忘记密码 找回密码的方式

    1.通过直接修改数据库中密码的加密字符(如果wordpress的版本不同,那么此方法是不好实现的) 2.使用找回密码的方式:通过邮箱找回密码 前端登录密码错误后 会显示   错误); 方法二 打开WP ...

  9. while loading persisted sessions 异常解决方法

    一直用tomcat一段时间都正常无事,最近一次启动tomcat就发生以下异常: 严重: IOException while loading persisted sessions: java.io.EO ...

  10. Eclipse反编译工具Jad及插件

    Eclipse反编译工具Jad及插件下载路径 http://download.csdn.net/detail/lijun7788/9689312 http://files.cnblogs.com/fi ...