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)(离散化)的主要内容,如果未能解决你的问题,请参考以下文章