日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces 706C

發布時間:2024/3/24 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces 706C 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#### Codefores 706C ## ##

  • 題目大意:給你n個字符串,要求滿足字典序排序 等價于 s[i]>=s[i-1]。每個操作需要花費能量,操作只能反轉。如果不能滿足題意輸出-1。
  • 題目分析:動態規劃。dp數組有兩種狀態,反轉與不反轉,可用0/1表示。有四種情況, dp[now][0]與dp[now-1][0/1],dp[now][0/1]與dp[now-1][0]
#include<bits/stdc++.h> #define me(a,b) memset(a,b,sizeof(a)) #define MAX 100005 #define INF 1e16 #define LL long long using namespace std;LL dp[MAX][2]; string s[MAX],ds[MAX]; LL cost[MAX]; int main() {int n;while(cin>>n){for(int i=1;i<=n;i++)cin>>cost[i];for(int i=1;i<=n;i++){cin>>s[i];ds[i]=s[i];reverse(ds[i].begin(),ds[i].end());}for(int i=1;i<=n;i++)dp[i][0]=dp[i][1]=INF;dp[1][0]=0;dp[1][1]=cost[1];for(int i=2;i<=n;i++){if(s[i]>=s[i-1])dp[i][0]=dp[i-1][0];if(ds[i]>=s[i-1])dp[i][1]=dp[i-1][0]+cost[i];if(s[i]>=ds[i-1])dp[i][0]=min(dp[i-1][1],dp[i][0]);if(ds[i]>=ds[i-1])dp[i][1]=min(dp[i-1][1]+cost[i],dp[i][1]);}printf("%I64d\n",min(dp[n][1],dp[n][0])==INF?-1:min(dp[n][1],dp[n][0]));}return 0; }

注意數據范圍,用了一次0x3f 果斷太小 ,大家還是別偷懶 寫個for吧。

總結

以上是生活随笔為你收集整理的Codeforces 706C的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。