• CodeForces 706C Hard problem


    题意:给你很多字符串,每个字符串可以翻转,翻转有价值,让你求满足递增的字符串,如果不行就-1

    思路:要么选,要么不选,线性dp

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+7;
    const long long INF=0x3f3f3f3f3f3f3f3fLL;
    string str[maxn][2];
    int n,a[maxn];
    long long dp[maxn][2];
    string revers(string s)
    {
        string res=s;
        int i,len=res.length();
        for(i=0;i<len/2;++i)
            swap(res[i],res[len-1-i]);
        return res;
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        for(int i=1;i<=n;i++){
            cin>>str[i][0];
            str[i][1]=revers(str[i][0]);
        }
        memset(dp,INF,sizeof(dp));
        dp[1][0]=0;dp[1][1]=a[1];
        bool ok=true;
        for(int i=2;i<=n;i++){
            if(str[i][0]>=str[i-1][0]){
                dp[i][0]=min(dp[i][0],dp[i-1][0]);
    //            printf("test1
    ");
            }
            if(str[i][0]>=str[i-1][1]){
                dp[i][0]=min(dp[i][0],dp[i-1][1]);
    //            printf("test2
    ");
            }
            if(str[i][1]>=str[i-1][0]){
                dp[i][1]=min(dp[i][1],dp[i-1][0]+a[i]);
    //            printf("test3
    ");
            }
            if(str[i][1]>=str[i-1][1]){
                dp[i][1]=min(dp[i][1],dp[i-1][1]+a[i]);
    //            printf("test4
    ");
            }
            if(dp[i][0]==INF&&dp[i][1]==INF){
                ok=false;
                break;
            }
        }
    //    for(int i=1;i<=n;i++){
    //        printf("%d == %lld %lld
    ",i,dp[i][0],dp[i][1]);
    //    }
        if(!ok)puts("-1");
        else printf("%I64d
    ",min(dp[n][0],dp[n][1]));
        return 0;
    }
  • 相关阅读:
    3.for in循环
    2.break与continue
    1.XHTML框架结构
    lamda表达式在EF中的应用
    View数据呈现相关技术
    ASP.NET MVC 4 技术讲解
    ASP.NET MVC 相关的社群与讨论区
    C# 随机红包算法
    圆圈里带 小写字母,大写字母
    使用SQL语句 检测 MSSQL死锁
  • 原文地址:https://www.cnblogs.com/lalalatianlalu/p/8455943.html
Copyright © 2020-2023  润新知