CodeForces 706 C. Hard problem(dp)
2017-02-28 16:00
399 查看
Description
给出n个字符串,翻转第i个串需要一个代价c[i],问使得这n个字符串保持升序所需的最小代价
Input
第一行一整数n表示字符串数量,之后n个整数c[i]表示翻转第i个串所需花费,最后n个字符串,总串长100000
(2<=n<=100000,0<=c[i]<=1e9)
Output
输出使得这n个串保持升序的最小代价
Sample Input
2
1 2
ba
ac
Sample Output
1
Solution
dp[i][0]和dp[i][1]表示不翻转和翻转第i个串使得前i个串保持升序的最小代价,每次枚举几种使得s[i]>=s[i-1]的方案进行转移即可
Code
给出n个字符串,翻转第i个串需要一个代价c[i],问使得这n个字符串保持升序所需的最小代价
Input
第一行一整数n表示字符串数量,之后n个整数c[i]表示翻转第i个串所需花费,最后n个字符串,总串长100000
(2<=n<=100000,0<=c[i]<=1e9)
Output
输出使得这n个串保持升序的最小代价
Sample Input
2
1 2
ba
ac
Sample Output
1
Solution
dp[i][0]和dp[i][1]表示不翻转和翻转第i个串使得前i个串保持升序的最小代价,每次枚举几种使得s[i]>=s[i-1]的方案进行转移即可
Code
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #include<queue> #include<map> #include<set> #include<ctime> using namespace std; typedef long long ll; #define INF 1e14+5 #define maxn 111111 string s[maxn],ss[maxn]; int n,c[maxn]; ll dp[maxn][2]; string deal(string a) { string ans=a; int len=a.length(); for(int i=0,j=len-1;i<j;i++,j--)swap(a[i],a[j]); return a; } int main() { while(~scanf("%d",&n)) { for(int i=1;i<=n;i++)cin>>c[i]; for(int i=1;i<=n;i++)cin>>s[i],ss[i]=deal(s[i]); for(int i=1;i<=n;i++)dp[i][0]=dp[i][1]=INF; //printf("%I64d\n",dp[1][1]); dp[1][0]=0,dp[1][1]=c[1]; int flag=1; for(int i=2;i<=n;i++) { if(s[i]>=s[i-1])dp[i][0]=min(dp[i][0],dp[i-1][0]); if(s[i]>=ss[i-1])dp[i][0]=min(dp[i][0],dp[i-1][1]); if(ss[i]>=s[i-1])dp[i][1]=min(dp[i][1],dp[i-1][0]+c[i]); if(ss[i]>=ss[i-1])dp[i][1]=min(dp[i][1],dp[i-1][1]+c[i]); if(dp[i][0]==INF&&dp[i][1]==INF) { flag=0; break; } } if(flag)printf("%I64d\n",min(dp [0],dp [1])); else printf("-1\n"); } return 0; }
相关文章推荐
- Codeforces 706 C. Hard problem (dp)
- codeforces 706C C. Hard problem(dp)
- CodeForces 706C-Hard problem(基本的DP)
- Codeforces 543A Writing Code 【滚动数组优化dp】
- DP——Hard problem (Codeforces Round #367 (Div. 2) C)
- CodeForces 245H Queries for Number of Palindromes (区间DP)
- codeforces 148 D 概率dp
- codeforces 855E 数位DP
- CodeForces 44H - Phone Number-dp
- codeforces 2B The least round way DP因子路径
- codeforces 533B B. Work Group(树形dp)
- CodeForces - 659G Fence Divercity (DP)★ ★ ★
- CodeForces - 148D Bag of mice(概率dp)
- Codeforces 274B 【树形DP】
- Codeforces 606C Sorting Railway Cars 思维,DP
- Codeforces 855 C. Helga Hufflepuff’s Cup (树形dp)
- (状态压缩dp)Codeforces 543 C-Remembering Strings
- [Codeforces 67C] Sequence of Balls (字符串DP)
- Codeforces 461B. Appleman and Tree[树形DP 方案数]
- Codeforces 441E Valera and Number 概率DP