首页 > 其他分享 >Codeforces Round #740 (Div. 1, based on VK Cup 2021 - Final (Engine)) B

Codeforces Round #740 (Div. 1, based on VK Cup 2021 - Final (Engine)) B

时间:2022-11-09 03:11:06浏览次数:60  
标签:740 Engine based Cup int Codeforces ij dp

B. Up the Strip

考虑dp
dp[i]表示当前i位置的cnt
考虑转移
我们对于第一个操作显然只用维护一个后缀和即可
dp[i]+=s[i+1]
对于第二个操作 也很简单
我们知道i的值
z除一个数j下取整等于i
z的范围就是 [ij,ij+j)
然后我们就会发现这是一个调和级数
最后还要注意的就是 这里的后缀和是小的减大的 大的本来后面要+1 但是和 -1抵消了 还有不能越界

void solve(){
    int n,m;cin>>n>>m;
    vector<int>dp(n+10),s(n+10);
    dp[n]=1;
    for(int i=n;i>=1;i--){
        for(int j=2;j*i<=n;j++)
            (dp[i]+=s[i*j]-s[min(n+1,i*j+j)])%=m;
        (dp[i]+=s[i+1])%=m;
        (s[i]=s[i+1]+dp[i])%=m;
    }
    cout<<dp[1]<<endl;
}

标签:740,Engine,based,Cup,int,Codeforces,ij,dp
From: https://www.cnblogs.com/ycllz/p/16871890.html

相关文章