问题标题: 酷町堂:2937 楼梯

0
0
已解决
陈曦
陈曦
资深天翼
资深天翼
#include<iostream>
using namespace std;
int n,k,f[150000];
int main(){
    cin>>n>>k;
    for(int i=1;i<=k;i++){
        f[i]=1;
    }
    for(int i=1;i<=n;i++){
        for(int j=i-k;j<=i-1;j++){
            f[i]+=f[j];
        }
        f[i]%=100003;
    }
    cout<<f[n]%100003;
    return 0;
}

20分


0
已采纳
张易晨
张易晨
新手光能
新手光能

如果你的k比i大,就会越界,还有你应该在加完后直接模,在循环外面有可能会超

所以我建议你可以第二重循环从1遍历到k

如果i>=j,a[i]+=a[i-j];a[i]%=100003;

另外你的初值为什么要赋值为1呢??

a[0]=1就行了

0
李奕歌
李奕歌
初级天翼
初级天翼

核心:

for(int i = 2;i<=n;i++)
    {
        for(int j = 1;j<=k&&j<=i;j++)
        {
            f[i] = (f[i]+f[i-j])%100003;
        }
    }

最后输出不要模了

0
0
徐子宸
徐子宸
中级天翼
中级天翼

外围从1~n

内层循环可以这样

我要回答