首页 > 其他分享 >CF EC Round 145 D. Binary String Sorting

CF EC Round 145 D. Binary String Sorting

时间:2023-03-24 15:22:05浏览次数:56  
标签:Binary 145 String 花费 int Round

D

题意

给一个01串,交换两个数需要花费\(10^{12}\),删除某个数需要花费\(10^{12}+1\),问最少花费多少使得串单调不降

思路

线性dp,\(f[i][0]\)表示前i位构建的串结尾为0,单调不降的花费,\(f[i][1]\)同理,\(f[i][2]\)表示前i位构建的串结尾1的个数多于1的花费。

代码

void solve() 
{
	string s;
	cin>>s;
	n=s.size();
	s=" "+s;
	int c1=1e12,c2=c1+1;
	for(int i=1;i<=n;i++) 
	{
		if(s[i]=='0') 
		{
			f[i][0]=f[i-1][0];
			f[i][1]=f[i-1][1]+c1;
			f[i][2]=f[i-1][2]+c2;
		}
		else 
		{
			f[i][0]=f[i-1][0]+c2;
			f[i][1]=f[i-1][0];
			f[i][2]=min(f[i-1][1],f[i-1][2]);
		}
	}
	cout<<min(min(f[n][0],f[n][1]),f[n][2])<<endl;
}

标签:Binary,145,String,花费,int,Round
From: https://www.cnblogs.com/LIang2003/p/17251899.html

相关文章