zoukankan      html  css  js  c++  java
  • Atcoder Grand Contest 031B(DP,思维)

    #include<bits/stdc++.h>
    using namespace std;
    int a[200007];
    int b[200007];
    long long dp[200007];
    long long sum[200007];
    const long long mod =1e9+7;
    int main(){
        dp[0]=1;
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        int cnt=0;
        for(int i=1;i<=n;i++) {
      if(a[i]!=a[i-1])
                b[++cnt]=a[i];//缩点
     }
     for(int i=1;i<=cnt;i++){
            dp[i]=dp[i-1];//i这个点不染色
            dp[i]=(dp[i]+sum[b[i]])%mod;//sum[b[i]]如果i这点染色多出的情况
            sum[b[i]]=(sum[b[i]]+dp[i-1])%mod;//sum[b[i]]记录了每一个b[i]颜色前面i-1有多少种情况(包括什么都不染)
     }
     printf("%lld",dp[cnt]);
        return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    java序列化与反序列化
    HTTP状态码
    基本运算符
    2019.9.10附加题while练习
    2019.9.11作业
    字符串
    列表list
    2019.9.10作业
    数字类型
    数据类型
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10548431.html
Copyright © 2011-2022 走看看