编程语言
首页 > 编程语言> > 2020牛客寒假算法基础集训营5

2020牛客寒假算法基础集训营5

作者:互联网

E碎碎念

 

 

思路:

题目中有一句话很重要:

 

所以一旦这一发是错的,那么下一发一定是对的。即上一发错,这一发对。

dp[i][0]的含义是:对于第i这一句是不行的

dp[i][1]的含义是:对于第i这一句是行的

两个转移方程: dp[i][0] = dp[i-x][1],由于你能不能行呀这句话是连着说x句的,所以这一句是不行的话,那么i-x+1~i都是不行的,所以转移到的是i-x这一句是行的

       dp[i][1] = dp[i-1][0]+dp[i-1][1],对于这一句是行的,那么就没什么要求,上一句无论是什么都行

代码:

#include<iostream>
#include<stdio.h>
using namespace std;
typedef long long ll;
const int maxn= 1e5+10;
const int mod = 1e9+7;
ll dp[maxn][2],sum[maxn];
int main(){
    int x;
    cin>>x;
    int q;
    cin>>q;
    dp[0][1] =1;//初始化
    for(int i=1;i<=maxn;i++){
        if(i>=x) dp[i][0] = dp[i-x][1];
        dp[i][1] = (dp[i-1][0]+dp[i-1][1])%mod;
    }
    for(int i=1;i<=maxn;i++){
        sum[i]=(sum[i-1]+dp[i][0]+dp[i][1])%mod;
    }
    
    while(q--){
        int l,r;
        scanf("%d%d",&l,&r);
        cout<<(sum[r]-sum[l-1]+mod)%mod<<endl;//这个一定不能少,少了就只有33%的通过率
    }
    return 0;
}

 

标签:一句,int,牛客,一发,2020,maxn,集训营,dp,mod
来源: https://www.cnblogs.com/lusiqi/p/12330827.html