zoukankan      html  css  js  c++  java
  • DP专集

    额!菜鸡的我准备学下dp,不定期更新

    要学的真的多

    先贴上今天的第一题

    子序列个数

    TimeLimit: 2000ms  MemoryLimit:32768KB
    64-bit integer IO format:%I64d
    已解决 | 点击收藏
    Problem Description

    子序列的定义:对于一个序列a=a[1],a[2],......a[n]。则非空序列a'=a[p1],a[p2]......a[pm]为a的一个子序列,其中1<=p1<p2<.....<pm<=n。

    例如4,14,2,3和14,1,2,3都为4,13,14,1,2,3的子序列。

    对于给出序列a,请输出不同的子序列的个数。(由于答案比较大,请将答案mod 1000000007)

     
    Input

    输入包含多组数据。每组数据第一行为一个整数n(1<=n<=1,000,000),表示序列元素的个数。

    第二行包含n个整数a[i] (0<=a[i]<=1,000,000)表示序列中每个元素。

     
    Output
    输出一个整数占一行,为所求的不同子序列的个数。由于答案比较大,请将答案mod 1000000007。
     
    SampleInput
    4
    1 2 3 2
    SampleOutput
    13
    #include<cstdio>
    #include<cstring>
    #define mod 1000000007
    /**
    其实就是一题找规律
    设f(n)为主串为n的字符串的子串的
    最大数量,
    可得如果 a[n]在字符串中出现过的话
    f(n)=f(n-1)*2-f(flag[a[n]])
    else
        f(n)=f(n-1)*2+1
    **/
    long long math[1000005];
    long long dp[1000005];
    long long flag[1000005];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            memset(flag,0,sizeof(flag));
            memset(dp,0,sizeof(dp));
            memset(math,0,sizeof(math));
            for(int i=1; i<=n; i++)
                scanf("%lld",&math[i]);
            dp[0]=0;
            dp[1]=1;
            for(int i=1; i<=n; i++)
            {
                if(flag[math[i]]!=0)
                {
                    dp[i]=(dp[i-1]*2-dp[flag[math[i]]-1]+mod)%mod;
                }
                else if(flag[math[i]]==0)
                {
                    dp[i]=(dp[i-1]*2+1)%mod;
                }
                flag[math[i]]=i;
            }
            printf("%lld
    ",dp[n]);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    三数之和
    罗马数字与整数
    Oracle 开启或关闭归档
    Oracle RMAN scripts to delete archivelog
    Oracle check TBS usage
    Oracle kill locked sessions
    场景9 深入RAC运行原理
    场景7 Data Guard
    场景4 Data Warehouse Management 数据仓库
    场景5 Performance Management
  • 原文地址:https://www.cnblogs.com/qq136155330/p/8933113.html
Copyright © 2011-2022 走看看