zoukankan      html  css  js  c++  java
  • luogu CF1105C Ayoub and Lost Array |動態規劃

    题意翻译

    已知有一个长度为(n)((1leq nleq 2 imes 10^5))的数列,每一个数的大小在([l,r])((1leq l leq r leq 10^9))之间。求出有多少种方案使得这个数列的和为(3)的倍数。答案对(10^9+7)取模。当然,如果无法组成任何一个合法的数列,答案即为(0)

    输入格式

    一行三个正整数(n),(l),(r)

    输出格式

    一行,表示方案数模(10^9+7)的结果。


    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int mod=1e9+7,N=2e5+10;
    #define int long long
    int n,l,r;
    int a,b,c;
    int dp[N][3];
    signed main(){
    	cin>>n>>l>>r;
    	if(l%3==1)b++,l++;
    	if(l%3==2)c++,l++;
    	if(r%3==1)b++,r--;
    	if(r%3==0)a++,r--;
    	int op=(r-l+1)/3;
    	a+=op,b+=op,c+=op;
    	dp[0][0]=1;
    	for(int i=1;i<=n;i++){
    		dp[i][0]=(dp[i-1][0]*a%mod+dp[i-1][1]*c%mod+dp[i-1][2]*b%mod)%mod;
    		dp[i][1]=(dp[i-1][0]*b%mod+dp[i-1][1]*a%mod+dp[i-1][2]*c%mod)%mod;
    		dp[i][2]=(dp[i-1][0]*c%mod+dp[i-1][1]*b%mod+dp[i-1][2]*a%mod)%mod;
    	}
    	cout<<dp[n][0]<<endl;
    }
    
  • 相关阅读:
    hdu6315 Naive Operations
    noi.ac #525 神树的权值
    JSOI2018 潜入行动
    GXOI/GZOI2019 旅行者
    Educational Codeforces Round #67
    [六省联考2017] 分手是祝愿
    NOI2014 随机数生成器
    NOI2012 随机数生成器
    USACO19JAN Redistricting
    HNOI2015 菜肴制作
  • 原文地址:https://www.cnblogs.com/naruto-mzx/p/12689490.html
Copyright © 2011-2022 走看看