问题 I: 米波

 

内存限制:128 MB时间限制:1 S标准输入输出

 

 

题目描述

米波,地卜师,是DotA中天灾军团的一位敏捷英雄。
一天,他在裂影荒墟找到了上古神器分离权杖。
在分离权杖的帮助下,米波可以通过k分钟去学习技能分则能成。米波可以使用分则能成来召唤另一个米波(一个完美的自主的自身复制),使用技能不花费时间,但技能的冷却时间为1分钟。米波的克隆也可以通过k分钟去学习这个技能。每一个米波的生存时间只有m分钟,已经存活m分钟的米波将会死亡而不会召唤另一个米波。
现在,从第1分钟初开始计算,我们想知道在第t+1分钟13秒一共有多少个米波,答案对1000000007取模。

 

输入格式

第一行包含一个正整数T(1≤T≤1,000)代表测试数据组数。
每一组数据由三个正整数k,m,t组成,1≤k<m<t≤100

 

输出格式

对于每一组数据,输出在第t+1分钟13秒一共有多少个米波,答案对1000000007取模。

 

输入样例 复制

4
1 2 3
2 3 4
2 4 5

3 4 5

 

输出样例 复制

2
2
5

1

 

 

问题 I: 米波_C语言

 

代码:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
long long int dp[10000];
long long int const MOD=1e9+7;
int main()
{
int T,k,m,t;
cin >> T;
while(T--)
{
memset(dp,0,sizeof(dp));
dp[0]=1;
cin >> k >> m >> t;
for(int i=1;i<=t;i++)
{
long long int q=0;
for(int j=i-m+1;j<=i-k;j++)
{
q+=j<0?0:dp[j];
q%=MOD;
}
dp[i]=q%MOD;
}
long long int sum=0;
for(int i=2;i<=t;i++)
{
dp[i]+=dp[i-1];
dp[i]%=MOD;
}
sum=dp[t]-dp[t-m];
if(sum<0)
sum+=MOD;
cout << sum << '\n';
}
return 0;
}