snnu1111(子序列求和)
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
Sample Output
HINT

Source
#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(子序列求和)的更多相关文章
- [C++]四种方式求解最大子序列求和问题
问题 给定整数: A1,A2,-,An,求∑jk=iAk 的最大值(为方便起见,假设全部的整数均为负数,则最大子序列和为0) 比如 对于输入:-2,11,-4,13,-5,-2,答案为20,即从A2到 ...
- 力扣152,53题,最大子序列求和and积
本内容为最大子序列的求和和求积.采用DP的思路, 当前值加上小于之前值,则从该节点重新算起. 这个代码只能返回其结果值,但不能返回最后的子序列(待修改). class Solution: def ma ...
- 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 ...
- 深度优先搜索DFS---最优子序列求和问题(1)
题目: 给定N 个整数(可能有负数),从中选择 K个数,使得这 K个数之和恰好等于一个给定的整数 X:如果有多种方案,那么选择它们中元素平方和最大的一个.例如,从4个整数{ 2, 3, 3 ,4}中选 ...
- 单调队列(数列中长度不超过k的子序列和的最值)
★实验任务 小 F 很爱打怪,今天因为系统 bug,他提前得知了 n 只怪的出现顺序以及击 倒每只怪得到的成就值 ai.设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒 钟出现一只新怪且没被击倒 ...
- “最大子序列和”算法 java
maxSubSum各自是最大子序列和的4中java算法实现. 第一种算法执行时间为O(N^3),另外一种算法执行时间为O(N^2),第三种算法执行时间为O(nlogn),第四种算法执行时间为线性N p ...
- 区间Dp 暴力枚举+动态规划 Hdu1081
F - 最大子矩形 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status Des ...
- J Dp
<span style="color:#000099;">/* ____________________________________________________ ...
- Demo003 最大连续子数组问题(《算法导论》4.1-5)
问题 问题描述 给定n个整数(可能为负数)组成的数组,要求一个数组连续下标和的最大值,数组的元素可正.可负.可为零. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的 ...
随机推荐
- hdu4714树形DP+贪心(乱搞)
Tree2cycle A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, we need 1 ...
- bzoj3875 【Ahoi2014】骑士游戏 spfa处理后效性动规
骑士游戏 [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. [问题描述] 在这个游戏中,JYY一共有两种攻 ...
- PAT (Advanced Level) 1037. Magic Coupon (25)
简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> ...
- 洛谷—— P3372 【模板】线段树 1
P3372 [模板]线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别 ...
- 分布式 OLTP 数据库
PingCAP招聘职位-拉勾网-最专业的互联网招聘平台 分布式 OLTP 数据库
- libpython2.7.so.1.0: cannot open shared object file: No such file or directory
解决方法如下: 1.编辑 vi /etc/ld.so.conf 如果是非root权限帐号登录,使用 sudo vi /etc/ld.so.conf 添加上python2.7的lib库地址 ...
- 《Spring设计思想》AOP设计基本原理
0.前言 Spring 提供了AOP(Aspect Oriented Programming) 的支持, 那么,什么是AOP呢?本文将通过一个另外一个角度来诠释AOP的概念,帮助你更好地理解和使用Sp ...
- 重载和重写在jvm运行中的区别(一)
1.重载(overload)方法 对重载方法的调用主要看静态类型,静态类型是什么类型,就调用什么类型的参数方法. 2.重写(override)方法 对重写方法的调用主要看实际类型.实际类型如果实现了该 ...
- 【.NET Core项目实战-统一认证平台】基于jackcao博客使用VSCode开发及感悟One搭建开发环境
原博客系列文章链接:https://www.cnblogs.com/jackcao/ 金焰的世界 感谢博主无私的奉献,感谢博主幼儿班的教学 基于jackcao博客使用VsCode开发及感悟One搭建开 ...
- EXCEPT(差集)集合运算
在集合论中,集合A与B的差集(A-B)是由属于集合A,但不属于集合B的元素组成的集合.可以认为两个集合的差A-B就是从A中减去B中也属于A的元素. 在T-SQL中,集合之差是用EXCEPT集合运算实现 ...