点进来吧,这里有你想要的
Time limit1000 ms
Description
题目链接https://csustacm.fun/problem/1093
住在云塘校区真是太可怜了,荒郊野外,方圆一公里都没有好吃的,一般都要地铁出去
唯一幸运的是,西门中信和东门去德思勤还是有好东西吃的,比如汉堡王,金村漫漫暑训和寒假回家的时候根本就吃不到 QAQ
汉堡王长这样:支持正版,盗版都不好吃,盗版茶颜难喝同理
汉堡王有很多好吃的小食,最好吃的当然是超大一根的薯霸王 香脆可口的王道椒香鸡腿 和王道川蜀鸡翅 和鲜嫩的霸王鸡条
当然最好吃的还是汉堡,皇堡有一层的两层的三层的,不过最好吃的还是安格斯厚牛堡(强推金沙安格斯厚牛堡可惜现在没了orz
本来有好多图片的。。。。
QAQorz一回到长沙就直奔汉堡王,已知小食的美味度是1,汉堡的美味度是m,QAQorz一共能吃n美味度的东西,请问QAQorz吃一次汉堡王有几种不同的搭配方案?
关于方案:如果两个方案吃汉堡和小食的先后顺序不同,则称这两种方案是不同的
具体来说:假设一份小食用一个1表示,一个汉堡用m个0表示。当m=2时,先吃一份小食再吃一个汉堡再吃一份小食,方案表示为1001,两个方案不同当且仅当两个01串是不同的。
Input
第一行一个数t,表示t(1≤t≤15)组数据。接下来t行,每行两个数表示n和m, 1≤n≤2e5, 1≤m≤10
Output
方案数,输出答案对100000007(1e8+7)取模.
Hint
样例解释:
5种方案分别为:
吃4份小食,表示为1111
先吃一个汉堡再吃2份小食,表示为0011
先吃一份小食再吃一个汉堡再吃一份小食,表示为1001
先吃两份小食再吃一个汉堡,表示为1100
吃两个汉堡,表示为0000
所以方案数为5
#include <cstdio>
#include <cstring>
#define M 100000007
long long f[200050];
int main()
{
int t,n,m;
scanf ("%d",&t);
while (t--){
scanf ("%d%d",&n,&m);
memset(f,0,sizeof(f));
f[0]=1;
for (int i=1; i<=n; i++){
if (i>=m) f[i]=(f[i-1]+f[i-m])%M;
else f[i]=(f[i-1])%M;
}
printf ("%lld\n",f[n]);
}
return 0;
}