码迷,mamicode.com
首页 > 其他好文 > 详细

Atcoder Grand Contest 031B(DP,思维)

时间:2019-03-17 20:05:09      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:name   contest   一个   print   bit   lld   family   i++   soft   

#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;
}

Atcoder Grand Contest 031B(DP,思维)

标签:name   contest   一个   print   bit   lld   family   i++   soft   

原文地址:https://www.cnblogs.com/ldudxy/p/10548431.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!