题意:有m种小写字符,给定一个长为n的序列,定义编辑距离为序列中相邻两个字母位置差的绝对值之和,其中字母位置是一个1到m的排列

安排一种方案,求编辑距离最小

n<=1e5,m<=20

思路:刚开始不会算贡献,觉得一定要把具体的排列搞出来才能做

其实pos[s[i-1]]和pos[s[i]]之差可以看成字符s[i-1]和字符s[i]被选择的时间的差

也就是说只有一个没有被选,另一个被选的情况下每次都会累计这样的字母对数的贡献

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> Pll;
typedef vector<int> VI;
typedef vector<PII> VII;
//typedef pair<ll,ll>P;
#define N 200010
#define M 200010
#define fi first
#define se second
#define MP make_pair
#define pb push_back
#define pi acos(-1)
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
#define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
#define lowbit(x) x&(-x)
#define Rand (rand()*(1<<16)+rand())
#define id(x) ((x)<=B?(x):m-n/(x)+1)
#define ls p<<1
#define rs p<<1|1 const int MOD=1e9+,inv2=(MOD+)/;
double eps=1e-;
int INF=1e9;
int inf=0x7fffffff;
int dx[]={-,,,};
int dy[]={,,-,}; char s[N];
int dp[<<],f[][]; int read()
{
int v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} int main()
{
int n=read(),m=read();
int S=(<<m)-;
scanf("%s",s+);
rep(i,,n)
{
int x=s[i-]-'a',y=s[i]-'a';
f[x][y]++;
f[y][x]++;
}
rep(i,,S) dp[i]=INF;
dp[]=;
rep(sta,,S-)
{
int t=;
rep(i,,m-)
{
if(sta>>i&) continue;
rep(j,,m-)
if(sta>>j&) t+=f[i][j];
} rep(i,,m-)
{
if(sta>>i&) continue;
dp[sta+(<<i)]=min(dp[sta+(<<i)],dp[sta]+t);
}
}
printf("%d\n",dp[S]);
return ;
}

最新文章

  1. java http工具类和HttpUrlConnection上传文件分析
  2. WPF
  3. 一篇博客理解Recyclerview的使用
  4. Codeforces Round #363 Fix a Tree(树 拓扑排序)
  5. 問題排查:F5啟動偵錯後所提示的錯誤 (1)
  6. Durandal介绍
  7. HADOOP namenode HA
  8. WCF分布式开发步步为赢(11):WCF流处理(Streaming)机制
  9. Visual Assist的破解与安装
  10. 1136. Parliament(二叉树)
  11. CentOS 7 +Nginx
  12. Android开机动画启动流程
  13. Android基础_BroadcastReceiver
  14. Linux查看非root运行的进程
  15. Mego开发文档 - 处理并发冲突
  16. django管理数据库之中文字符编码问题
  17. scala链接mysql
  18. 构建之法 chapter1 心得
  19. java四种权限修饰符(public &gt; protected &gt; (default) &gt; private)
  20. [Spark][Python]Mapping Single Rows to Multiple Pairs

热门文章

  1. nginx配置多个虚拟主机(mac)
  2. 大数据学习笔记之Zookeeper(一):Zookeeper理论篇(一)
  3. elementUI 弹出框添加可自定义拖拽和拉伸功能,并处理边界问题
  4. MongoDB分片配置 优化 不错
  5. Altium Designer chapter6总结
  6. python实现获取文件夹中的最新文件
  7. Test Case Design Method - OATS
  8. JavaScript Is or isNot
  9. beeline链接hive报错
  10. XMPP即时通讯协议使用(六)——开发Openfire聊天记录插件