B. Maximum Cost Deletion1000 / 思维 贪心
Posted 幽殇默
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B. Maximum Cost Deletion1000 / 思维 贪心相关的知识,希望对你有一定的参考价值。
https://codeforces.com/problemset/problem/1550/B
首先我们要知道,如何才可以够贪。
情况有如下两种情况:
- 不合并,那么总的值:
n*a+n*b
- 合并,总的价值:
n*a+x*b
其中x为段数
那么关键就是求x,最后比较大小即可。
101有三段,对应的x是 2 101->11
1010有四段,对应的x是3 1010->101>11
10101有五段,对应的x是3 10101->1101->1111
可以得出结论: x=cnt/2+1
其中cnt是总的段数
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int t; cin>>t;
while(t--)
{
int n,a,b; cin>>n>>a>>b;
string s; cin>>s;
int cnt=1;
for(int i=0;i<s.size();i++)
{
if(i+1<s.size()&&s[i]!=s[i+1]) cnt++;
}
cout<<n*a+max(n*b,b*(cnt/2+1))<<endl;
}
return 0;
}
以上是关于B. Maximum Cost Deletion1000 / 思维 贪心的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #717 (Div. 2)-B. Maximum Cost Deletion-题解
CF1092F Tree with Maximum Cost
Leetcode 1937. Maximum Number of Points with Cost
Codeforces 1092 F Tree with Maximum Cost (换根 + dfs)