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)

cf codeforces round#527F. Tree with Maximum Cost树形dp

Avito Cool Challenge 2018:D. Maximum Distance (最小生成树)