1111: 子序列求和

Time Limit: 3 Sec  Memory Limit: 64 MB
Submit: 10  Solved: 2
[Submit][Status][Web Board] [Edit]

Description

给出n个数字,分别为1,2,3,……,n。从中选出t个数字,且这t个数字和为x的方案数为ft,x 。给出m。输出下面的值:
 
数据满足n <= 20000,m <= min(10, n)。

Input

第一行输入T表示测试数据的行数。接下来T行,每行两个数字n, m。T <= 20。

Output

对于每组测试数据,输出一行。

Sample Input

1 4 2

Sample Output

64

HINT

Source

用d[t][x]表示t个数字和为x的方案数,且这t个数字中的最大数字不超过n。
核心思想 : 给d[t][x]中的每个数字减掉一,变成d[t][x-t],d[t][x]应该等于d[t][x-t].
如果这t个数字中的最小数字为1的话,减去1,最小数字就变为0,相当于t-1个数字,d[t-1][x-t]
,然而这两种情况都未考虑,最大数字不超过n的情况,假设d[t][x-t]中最大数字为n,给这t个数字每个加上1,
那么最大数字就为n+1,超过n,所以,要去掉n+1,这个最大数字,减掉这种情况,相当于减掉d[t-1][x-t].
还有一个坑就是A+B-C,由于要取模,所以A+B可能小于C,(A+B-C+MOD)%MOD;
 (d%MOD+MOD)%MOD;

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
#define maxn 21000
#define LL long long
#define MOD 1000000007
int n,m;
LL answer;
LL d[][maxn*];
LL f[];
void init()
{
memset(d,,sizeof(d));
for(int i=;i<;i++)
f[i]=;
}
LL pow(int a,int b)
{
LL ans=;
for(int i=;i<=b;i++)
{
ans=(ans*a)%MOD;
}
return ans;
}
void solve()
{
for(int i=;i<=n;i++)
d[][i]=;
f[]=pow(,n);
// cout<<f[1]<<endl;
for(int t=;t<=m;t++)
{
for(int x=;x<(t*n);x++)
{
d[t][x]=(d[t][x-t]+d[t-][x-t]-d[t-][x-(n+)] + MOD)%MOD; f[t]=(f[t]*(d[t][x]+))%MOD;
//printf("%d %d %d\n",t,x,d[t][x]);
}
//最小值要么为1,要么不为1,
//当最小值为1时,最大值可能为n,需要减去d[t-1][x-(n+1)];
//当最小值不为1,最大值也可能为n,需要减去d[t-1][x-(n+1)];
//由于这两种情况互斥,所以最多只需要减1次
//cout<<endl;
// while(f[t]<0)
//cout<<f[t]<<endl;
} answer=;
for(int t=;t<=m;t++)
{
// printf("f %d %d\n",t,f[t]);
answer=(answer+f[t])%MOD;
answer=answer%MOD;
}
// while(answer<0)
printf("%lld\n",answer%MOD);
}
int main()
{
// cout<<(-5)%3<<endl;
int t;
scanf("%d",&t);
while(t--)
{
init();
scanf("%d%d",&n,&m);
solve();
}
return ;
}

snnu1111(子序列求和)的更多相关文章

  1. [C++]四种方式求解最大子序列求和问题

    问题 给定整数: A1,A2,-,An,求∑jk=iAk 的最大值(为方便起见,假设全部的整数均为负数,则最大子序列和为0) 比如 对于输入:-2,11,-4,13,-5,-2,答案为20,即从A2到 ...

  2. 力扣152,53题,最大子序列求和and积

    本内容为最大子序列的求和和求积.采用DP的思路, 当前值加上小于之前值,则从该节点重新算起. 这个代码只能返回其结果值,但不能返回最后的子序列(待修改). class Solution: def ma ...

  3. ZOJ 3872 Beauty of Array 连续子序列求和

    Edward has an array A with N integers. He defines the beauty of an array as the summation of all dis ...

  4. 深度优先搜索DFS---最优子序列求和问题(1)

    题目: 给定N 个整数(可能有负数),从中选择 K个数,使得这 K个数之和恰好等于一个给定的整数 X:如果有多种方案,那么选择它们中元素平方和最大的一个.例如,从4个整数{ 2, 3, 3 ,4}中选 ...

  5. 单调队列(数列中长度不超过k的子序列和的最值)

    ★实验任务 小 F 很爱打怪,今天因为系统 bug,他提前得知了 n 只怪的出现顺序以及击 倒每只怪得到的成就值 ai.设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒 钟出现一只新怪且没被击倒 ...

  6. “最大子序列和”算法 java

    maxSubSum各自是最大子序列和的4中java算法实现. 第一种算法执行时间为O(N^3),另外一种算法执行时间为O(N^2),第三种算法执行时间为O(nlogn),第四种算法执行时间为线性N p ...

  7. 区间Dp 暴力枚举+动态规划 Hdu1081

    F - 最大子矩形 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status Des ...

  8. J Dp

    <span style="color:#000099;">/* ____________________________________________________ ...

  9. Demo003 最大连续子数组问题(《算法导论》4.1-5)

    问题 问题描述  给定n个整数(可能为负数)组成的数组,要求一个数组连续下标和的最大值,数组的元素可正.可负.可为零.  数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的 ...

随机推荐

  1. 洛谷P2527 [SHOI2001]Panda的烦恼

    题目描述 panda是个数学怪人,他非常喜欢研究跟别人相反的事情.最近他正在研究筛法,众所周知,对一个范围内的整数,经过筛法处理以后,剩下的全部都是质数,不过panda对这些不感兴趣,他只对被筛掉 ...

  2. 【网络流】codeforces C. Heidi and Library (hard)

    http://codeforces.com/contest/802/problem/C

  3. xftp向ubuntu传输文件错误

    xftp向ubuntu传输文件错误原因: 登陆用户对文件夹没有权限. 解决方法:授予权限 chmod 777 该目录名

  4. 16.1117 NOIP 模拟赛

    水灾(sliker.cpp/c/pas) 1000MS  64MB 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY ...

  5. 深入理解计算机操作系统——12章:多进程,IO多路复用

    三种并行的应用程序: 1. 基于进程的并发编程: 2. 基于IO多路复用的并发: 3. 基于线程的并发编程: 12.1 基于进程的并发编程 进程的优劣: (1)进程间共享文件表,但不共享用户地址空间, ...

  6. 12.3——类作用域,构造函数,友元,static类成员

    类作用域: (1)成员函数在类外定义时,因为函数体还有形参列表都出现在成员名之后,都是在类作用域内定义,所以不用加域作用符 来引用其他的成员. (2)函数的返回值不一定需要在类的作用域中,但是若是返回 ...

  7. msp430项目编程

    msp430中项目---LED数码管显示 1.数码管介绍 2.代码(直接使用引脚驱动) 3.代码(使用译码器驱动) 4.项目总结 msp430项目编程 msp430入门学习

  8. Space Ant--poj1696(极角排序)

    http://poj.org/problem?id=1696 极角排序是就是字面上的意思   按照极角排序 题目大意:平面上有n个点然后有一只蚂蚁他只能沿着点向左走  求最多能做多少点 分析:  其实 ...

  9. [Bzoj3233][Ahoi2013]找硬币[基础DP]

    3233: [Ahoi2013]找硬币 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 924  Solved: 482[Submit][Status][ ...

  10. Hive安装中遇到过的坑

    实现说明每一个用户的环境都有细微的不一致,所以这里只是个人经过这些坑的处理,但是不意味着所有处理都是这样的操作,仅作为参考. 第一个坑 数据库安装,数据库最好装在Linux上,一直出了很多错,这里有一 ...