[ABC303D] Shift vs. CapsLock - 洛谷
#include <bits/stdc++.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl '\n' #define all(x) x.begin(), x.end() using namespace std; const int N=2e6+10,M=1e3+10,mod=998244353,INF=0x3f3f3f3f; int f[N][3]; signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int x,y,z;cin>>x>>y>>z; string s;cin>>s; int n=s.size(); //1表示当前转换灯亮着, //f(i,1)表示操作前i个字符后亮着最小值 //f(i,1)表示操作前i个字符后暗着最小值 f[0][0]=0;f[0][1]=z; for(int j=0;j<n;j++) { if(s[j]=='A') { int i=j+1; //固定+z表示肯定要操作,*2表示,操作两次灯; f[i][1]=min(f[i-1][0]+z+min(x,y),f[i-1][1]+min(z*2+y,x)); f[i][0]=min(f[i-1][0]+min(y,z*2+x),f[i-1][1]+z+min(x,y)); } else { int i=j+1; f[i][1]=min(f[i-1][1]+min(y,z*2+x),f[i-1][0]+z+min(x,y)); f[i][0]=min(f[i-1][0]+min(x,y+z*2),f[i-1][1]+z+min(x,y)); } } // for(int i=1;i<=n;i++) // { // //cout<<min(f[i][0],f[i][1])<<endl; // } cout<<min(f[n][0],f[n][1])<<endl; return 0; }
[ABC303D] Shift vs. CapsLock
最新推荐文章于 2024-09-06 10:38:06 发布