首页 > 其他分享 >[ARC071F] Infinite Sequence

[ARC071F] Infinite Sequence

时间:2023-10-23 23:22:55浏览次数:31  
标签:Sequence sum 序列 Dp Infinite neq ARC071F dp mod

题目描述:

定义 \(n-\)可爱序列 指无限长的由 \(\{1,2...,n\}\) 组成的序列。同时 \(a_1,a_2...\)满足以下条件:

1.第 \(n\) 个及以后的元素是相同的,即若 \(\forall i,j\geq n,a_i=a_j\) 。

2.对于每个位置 \(i\),紧随第 \(i\) 个元素后的 \(a_i\) 个元素是相同的,即若 \(\forall i<j<k≤i+a_i,a_j=a_k\)。

输入 \(n\),请输出 \(n-\)可爱序列的数量 \(\bmod 10^9+7\) 。

\(n\leq{10^6}\)。

思路:

首先我们先对这个题目进行一些转换:
1. n后的每个数都应与n相同
2. 若第i位为x,则[i+1,i+x]均=x

对于一个计数类型的题目,要么选择组合,要么就是用 Dp。显然这里 Dp可能更加方便一点

我们观察一下题目中的条件,发现所有的范围都是往后延申的,所以这启发我们从后往前Dp。
令 \(dp_i\) 表示当前填到了第 \(i\) 位,其中 \(i\sim n\) 位的方案数位多少
然后我们进行分类讨论:

  1. 若 \(a_i=1\& a_{i+1}\neq 1\|a_{i+1}=1\) 则 \(dp_i+=dp_{i+1}\)
  2. 若 \(a_i\neq 1\& a_{i+1}\neq 1\) 则序列形如abbbbbbb,则 \(dp_i=(n-1)\times (n-1)\)
  3. 若 \(a_i\neq 1\& a_{i+1}=1\) 则序列形如 a11111X,则 \(dp_i=\sum\limits_{x=2}^{n}f_{i+x+1}\)

其实是一个不错的计数,但是不能算很难的那种。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
    int x=0,f=1;
    char c=getchar();
    while(!isdigit(c)){
        if(c=='-')f=-1;
        c=getchar();
    }
    while(isdigit(c)){
        x=(x<<1)+(x<<3)+(c^48);
        c=getchar();
    }
    return x*f;
}
const int maxn=1e6+5;
const int mod=1e9+7;
int n;
int dp[maxn];
signed main(){
    n=read();
    dp[n]=n;
    dp[n-1]=n*n%mod;
    int sum=0;
    for(int i=n-2;i>=1;i--){
        sum=(sum+dp[i+3])%mod;
        dp[i]=(dp[i]+dp[i+1])%mod;
        dp[i]=(dp[i]+(n-1)*(n-1)%mod)%mod;
        dp[i]=(dp[i]+sum+i+1)%mod;
    }
    cout<<dp[1]<<endl;
    return 0;
}

标签:Sequence,sum,序列,Dp,Infinite,neq,ARC071F,dp,mod
From: https://www.cnblogs.com/Candycar/p/17783731.html

相关文章

  • PAT 甲级【1007 Maximum Subsequence Sum】
    本题是考察动态规划与java的快速输入:max[i]表示第i个结尾的最大的连续子串和。bbegin[i]表示第[begin[i],i]为最大和的开始位置超时代码:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassMain{@Suppres......
  • PAT_A 1085 Perfect Sequence
    Givenasequenceofpositiveintegersandanotherpositiveinteger p.Thesequenceissaidtobea perfectsequence if M≤m×p where M and m arethemaximumandminimumnumbersinthesequence,respectively.Nowgivenasequenceandaparameter p,y......
  • Struct SequenceDemo01
    packagecom.chen.struct;publicclassSequenceDemo01{publicstaticvoidmain(String[]args){System.out.println("hello1");System.out.println("hello2");System.out.println("hello3");System.o......
  • CF568E Longest Increasing Subsequence 题解
    LongestIncreasingSubsequenceLIS问题有两种主流\(O(n\logn)\)解法,最常见的树状数组法,以及不那么常见的二分法。然后考虑本题,发现一个神奇的思路就是求出LIS后倒序复原出数组。进一步思考后发现,因为本题是LIS(LongestIncreasingSubsequence)而非LNDS(LongestNon-Decr......
  • Sequence to Sequence Learning with Neural Networks
    SequencetoSequenceLearningwithNeuralNetworks关键词:LSTM,Seq2Seq......
  • CF1264D2 Beautiful Bracket Sequence
    第二次听这道题,写个推导过程。考虑对于给定的括号序列如何算答案,考虑最终答案对应回原序列的位置,于是我们要找到一个位置让其左边的左括号与右边的右括号一样多。因为挪指针时两者之一一定变化,并且两边均单调,所以这个分界点是唯一的。考虑枚举分界点算答案。假设左边有\(x\)个......
  • [ARC116C] Multiple Sequences题解
    思路我们可以很好的想到一种\(O(nm)\)的dp:状态:\(dp_{i,j}\)为搜到第\(i\)个,最后一个数是\(j\)的方案数。转移:\(dp_{i,j}=\displaystyle\sum_{k|j,k\not=j}dp_{i-1,k}\)当然这是会超时的。我们换一种思路,我们先枚举最后一个数,再计算方案数。这有个好处,我们缩小......
  • Codeforces Round 903 (Div. 3) E. Block Sequence(DP)
    CodeforcesRound903(Div.3)E.BlockSequence思路:设dp[i]为当i~n为完美的最少删除次数dp[n]=1,dp[n+1]=0;从后至前对于dp[i]更新若直接删除当前点,则为dp[i+1]+1若不删除则为min(dp[i+a[i]+1],dp[i]);i+a[i]+1为a[i]不能覆盖的位置#defineintlonglong#define......
  • Codeforces Round 685 (Div. 2) B. Non-Substring Subsequence
    对于一个长为\(n\)的\(01\)字符串\(s\)有\(n\)个询问。第\(i\)个询问被\(l_i,r_i\)描述\(1\leql_i<r_i\leqn\)。对于每个询问,你需要确定\(s\)中是否存在一个子序列等同于子串\(s[l_i\cdotsr_i]\)。显然子序列可以和子串仅有一个字符不相同。于是\(s......
  • CF264B Good Sequences 题解
    GoodSequences状态很显然,设\(f[i]\)表示位置\(i\)的最长长度。关键是转移,暴力转移是\(O(n^2)\)的,我们必须找到一个更优秀的转移。因为一个数的质因子数量是\(O(\logn)\)的,而只有和这个数具有相同质因子的数是可以转移的;因此我们可以对于每个质数\(p\),设一个\(mx_p......