2021.8.17提高B组模拟8T2 + P7296 [USACO21JAN] Uddered but not Herd(状压dp)(离散化)

Posted SSL_LKJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021.8.17提高B组模拟8T2 + P7296 [USACO21JAN] Uddered but not Herd(状压dp)(离散化)相关的知识,希望对你有一定的参考价值。

Uddered but not Herd

题目传送门

题目

解题思路

离散化 + 状压dp

AC代码

#include<algorithm>
#include<cstring>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int o,a[100005],b[100005],c[30][30],f[1<<20];
string s;
int main()
{
	memset(f,0x3f,sizeof(f));//初值
	f[0]=1;
	cin>>s;
	int len=s.size();
	for(int i=0;i<len;i++)a[i+1]=s[i];//离散化
	sort(a+1,a+len+1);
	int m=unique(a+1,a+len+1)-a-1;
	for(int i=1;i<=len;i++)b[i]=lower_bound(a+1,a+m+1,s[i-1])-a-1; 
	for(int i=1;i<len;i++)c[b[i]][b[i+1]]++;//cost
	for(int i=1;i<(1<<m);i++)//状压dp
		for(int j=0;j<m;j++)
			if(i&1<<j)
			{
				int sum=f[i^1<<j];
				for(int k=0;k<m;k++)
					if(i&1<<k)sum+=c[j][k];
				f[i]=min(f[i],sum);
			}
	printf("%d",f[(1<<m)-1]);
	return 0;
}

谢谢

以上是关于2021.8.17提高B组模拟8T2 + P7296 [USACO21JAN] Uddered but not Herd(状压dp)(离散化)的主要内容,如果未能解决你的问题,请参考以下文章

2017.12.09NOIP提高组模拟赛A组

2017.07.16【NOIP提高组】模拟赛B组 卫星照片 题解

2017.07.14NOIP提高组模拟赛B组

2021.7.21提高B组模拟8T1 好数(模拟)

2017.07.11NOIP提高组模拟赛B组

2018.8.10提高B组模拟考试