I - Invoker (dp)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
string s;
ll ans=0;
int dp[N][10];
string ss[30][10];
int chong(string b,string a){
	if(a==b) return 3;
	else if(a[1]==b[0]&&a[2]==b[1]) return 2;
	else if(a[2]==b[0]) return 1;
	else return 0;
}
int main(){
	freopen("in.txt","r",stdin);
ss[int('Y'-'A')][0]="QQQ";ss[int('Y'-'A')][1]="QQQ";ss[int('Y'-'A')][2]="QQQ";ss[int('Y'-'A')][3]="QQQ";ss[int('Y'-'A')][4]="QQQ";ss[int('Y'-'A')][5]="QQQ";
ss[int('V'-'A')][0]="QQW";ss[int('V'-'A')][1]="QWQ";ss[int('V'-'A')][2]="WQQ";ss[int('V'-'A')][3]="QQW";ss[int('V'-'A')][4]="QWQ";ss[int('V'-'A')][5]="WQQ";
ss[int('G'-'A')][0]="QQE";ss[int('G'-'A')][1]="QEQ";ss[int('G'-'A')][2]="EQQ";ss[int('G'-'A')][3]="QQE";ss[int('G'-'A')][4]="QEQ";ss[int('G'-'A')][5]="EQQ";
ss[int('C'-'A')][0]="WWW";ss[int('C'-'A')][1]="WWW";ss[int('C'-'A')][2]="WWW";ss[int('C'-'A')][3]="WWW";ss[int('C'-'A')][4]="WWW";ss[int('C'-'A')][5]="WWW";
ss[int('X'-'A')][0]="QWW";ss[int('X'-'A')][1]="WQW";ss[int('X'-'A')][2]="WWQ";ss[int('X'-'A')][3]="QWW";ss[int('X'-'A')][4]="WQW";ss[int('X'-'A')][5]="WWQ";
ss[int('Z'-'A')][0]="WWE";ss[int('Z'-'A')][1]="WEW";ss[int('Z'-'A')][2]="EWW";ss[int('Z'-'A')][3]="WWE";ss[int('Z'-'A')][4]="WEW";ss[int('Z'-'A')][5]="EWW";
ss[int('T'-'A')][0]="EEE";ss[int('T'-'A')][1]="EEE";ss[int('T'-'A')][2]="EEE";ss[int('T'-'A')][3]="EEE";ss[int('T'-'A')][4]="EEE";ss[int('T'-'A')][5]="EEE";
ss[int('F'-'A')][0]="QEE";ss[int('F'-'A')][1]="EQE";ss[int('F'-'A')][2]="EEQ";ss[int('F'-'A')][3]="QEE";ss[int('F'-'A')][4]="EQE";ss[int('F'-'A')][5]="EEQ";
ss[int('D'-'A')][0]="WEE";ss[int('D'-'A')][1]="EWE";ss[int('D'-'A')][2]="EEW";ss[int('D'-'A')][3]="EEW";ss[int('D'-'A')][4]="EWE";ss[int('D'-'A')][5]="WEE";
ss[int('B'-'A')][0]="QWE";ss[int('B'-'A')][1]="QEW";ss[int('B'-'A')][2]="WEQ";ss[int('B'-'A')][3]="WQE";ss[int('B'-'A')][4]="EWQ";ss[int('B'-'A')][5]="EQW";
	cin>>s;
	memset(dp,0,sizeof(dp));
	int len=s.length();
	ans=ans+3*len+len;
	for(int i=1;i<len;i++){
		for(int j=0;j<6;j++){
			for(int k=0;k<6;k++){ 
				dp[i][j]=max(dp[i][j],dp[i-1][k]+chong(ss[int(s[i]-'A')][j],ss[int(s[i-1]-'A')][k]));
			//	cout<<s[i]<<" "<<s[i-1]<<endl;
				//cout<<chong(ss[int(s[i]-'A')][j],ss[int(s[i-1]-'A')][k])<<" "; 
				
			} 
			cout<<dp[i][j]<<" ";
		}
		cout<<endl;
	}
	//cout<<chong("WEQ","QWE")<<endl;
	int t=0;
	for(int i=0;i<6;i++){
		t=max(dp[len-1][i],t);
	}
	cout<<t<<endl;
	printf("%d\n",ans-t);
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值