zoukankan      html  css  js  c++  java
  • Codeforces Round #367 (Div. 2) C. Hard problem

    题目链接:Codeforces Round #367 (Div. 2) C. Hard problem

    题意:

    给你一些字符串,字符串可以倒置,如果要倒置,就会消耗vi的能量,问你花最少的能量将这些字符串排成字典序

    题解:

    当时1点过头太晕了,看错题了,然后感觉全世界都会,就我不会,- -!结果就是一个简单的DP,

    设dp[i][0]表示第i个字符串不反转的情况,dp[i][1]表示第i个字符串反转的情况

    状态转移方程看代码

     1 #include<bits/stdc++.h>
     2 #define F(i,a,b) for(int i=a;i<=b;i++)
     3 using namespace std;
     4 typedef long long ll;
     5 
     6 const int N=1e5+7;
     7 ll dp[N][2],inf=(1ll<<62)-1;
     8 int n,v[N],lena,lenb;
     9 char a[N],b[N],c[N],d[N];
    10 
    11 inline void up(ll &a,ll b){if(a>b)a=b;}
    12 
    13 int main()
    14 {
    15     scanf("%d",&n);
    16     F(i,1,n)scanf("%d",v+i);
    17     scanf("%s",a),lena=strlen(a);
    18     for(int i=0,j=lena-1;i<lena;i++,j--)c[j]=a[i];
    19     dp[1][0]=0,dp[1][1]=v[1],c[lena]='';
    20     F(i,2,n)
    21     {
    22         scanf("%s",b),lenb=strlen(b),d[lenb]='';
    23         for(int ii=0,j=lenb-1;ii<lenb;ii++,j--)d[j]=b[ii];
    24         dp[i][0]=dp[i][1]=inf;
    25         if(strcmp(a,b)<=0)up(dp[i][0],dp[i-1][0]);
    26         if(strcmp(c,b)<=0)up(dp[i][0],dp[i-1][1]);
    27         if(strcmp(a,d)<=0)up(dp[i][1],dp[i-1][0]+v[i]);
    28         if(strcmp(c,d)<=0)up(dp[i][1],dp[i-1][1]+v[i]);
    29         strcpy(a,b),strcpy(c,d),lena=lenb;
    30     }
    31     ll ans=min(dp[n][0],dp[n][1]);
    32     printf("%I64d
    ",ans==inf?-1:ans);
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    个人技术博客(α)
    git常用命令合集
    软件工程实践2017第二次结对作业
    软件工程实践2017第一次结对作业
    软件工程实践2017第二次作业
    软件工程实践2017第一次作业
    学习总结
    约瑟夫
    今天是星期几
    斐波那契数列取石子游戏
  • 原文地址:https://www.cnblogs.com/bin-gege/p/5765077.html
Copyright © 2011-2022 走看看