#35 string(缩点+动态规划)

  容易发现有了交换相邻字符的操作后,只要字符串所含有的字符种类和数量相同其就是等价的。这样的状态只有n^3级别,将其抽象成点子串变换抽象成边后就是求最长路径了,缩点dp解决。

  码量巨大,不是很明白要怎样才能用3k写完。

#include<iostream> 
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
#define N 55
#define P 100000000000000000LL
unsigned long long C[N][N];
int n,m,p[N*N*N],t=0,tmp[20];
int dfn[N*N*N],low[N*N*N],stk[N*N*N],SET[N*N*N],top=0,cnt=0;
bool flag[N*N*N];
char s[N],s2[N];
vector<int> ele[N*N*N];
struct magic{int n,a,b,c,x,y,z;}a[N<<1];
struct data{int to,nxt;}edge[N*N*N*N];
struct biginteger
{unsigned long long x,y;bool operator <(const biginteger&a) const{return x==a.x?y<a.y:x<a.x;}bool operator >(const biginteger&a) const{return x==a.x?y>a.y:x>a.x;}biginteger operator +(const biginteger&a) const{biginteger v=(biginteger){x,y};v.x+=a.x;v.y+=a.y;if (v.y>=P) v.x++,v.y-=P;return v;}biginteger operator *(const unsigned long long&a) const{unsigned long long v[40]={0};int n=0;biginteger tmp=(biginteger){x,y};while (tmp.y) v[++n]=tmp.y%10,tmp.y/=10;    if (tmp.x){n=17;while (tmp.x) v[++n]=tmp.x%10,tmp.x/=10;}for (int i=1;i<=n;i++) v[i]=v[i]*a;for (int i=1;i<=n;i++)v[i+1]+=v[i]/10,v[i]%=10;while (v[n+1]) n++,v[n+1]+=v[n]/10,v[n]%=10;for (int i=17;i>=1;i--) tmp.y=tmp.y*10+v[i];for (int i=n;i>=18;i--) tmp.x=tmp.x*10+v[i];return tmp;}
}value[N*N*N],V[N*N*N],f[N*N*N];
int trans(int x,int y,int z){return x*(n+1)*(n+1)+y*(n+1)+z+1;}
void addedge(int x,int y){t++;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;}
void tarjan(int k)
{dfn[k]=low[k]=++cnt;flag[k]=1;stk[++top]=k;for (int i=p[k];i;i=edge[i].nxt)if (!dfn[edge[i].to]) tarjan(edge[i].to),low[k]=min(low[k],low[edge[i].to]);else if (flag[edge[i].to]) low[k]=min(low[k],dfn[edge[i].to]);if (dfn[k]==low[k]){t++;while (stk[top]!=k){SET[stk[top]]=t;ele[t].push_back(stk[top]);V[t]=V[t]+value[stk[top]];flag[stk[top]]=0;top--;}SET[k]=t;ele[t].push_back(k);V[t]=V[t]+value[k];flag[k]=0;top--;}
}
namespace newgraph
{int n,t=0,p[N*N*N]={0},degree[N*N*N],q[N*N*N];struct data{int to,nxt;}edge[N*N*N*N];void addedge(int x,int y){t++;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;}void topsort(){int head=0,tail=0;for (int i=1;i<=n;i++) if (!degree[i]) q[++tail]=i;while (tail<n){int x=q[++head];for (int i=p[x];i;i=edge[i].nxt){degree[edge[i].to]--;if (!degree[edge[i].to]) q[++tail]=edge[i].to;}}}void solve(){topsort();for (int i=n;i>=1;i--){for (int j=p[q[i]];j;j=edge[j].nxt)f[q[i]]=max(f[q[i]],f[edge[j].to]);f[q[i]]=f[q[i]]+V[q[i]];}}
}
void rebuild()
{memset(flag,0,sizeof(flag));for (int i=1;i<=t;i++){for (int j=0;j<ele[i].size();j++)for (int k=p[ele[i][j]];k;k=edge[k].nxt)if (!flag[edge[k].to]&&SET[edge[k].to]!=i){flag[edge[k].to]=1;newgraph::addedge(i,SET[edge[k].to]);newgraph::degree[SET[edge[k].to]]++;}for (int j=0;j<ele[i].size();j++)for (int k=p[ele[i][j]];k;k=edge[k].nxt)flag[edge[k].to]=0;}newgraph::n=t;
}
int main()
{n=read(),m=read();for (int i=1;i<=m;i++){scanf("%s",s+1);scanf("%s",s2+1);a[i].n=strlen(s+1);for (int j=1;j<=a[i].n;j++)if (s[j]=='A') a[i].a++;else if (s[j]=='B') a[i].b++;else if (s[j]=='C') a[i].c++;for (int j=1;j<=a[i].n;j++)if (s2[j]=='A') a[i].x++;else if (s2[j]=='B') a[i].y++;else if (s2[j]=='C') a[i].z++;if (a[i].a==a[i].x&&a[i].b==a[i].y&&a[i].c==a[i].z) a[i].a=a[i].b=a[i].c=n+1;}C[0][0]=1;for (int i=1;i<=n;i++){C[i][0]=C[i][i]=1;for (int j=1;j<i;j++)C[i][j]=C[i-1][j-1]+C[i-1][j];}for (int i=0;i<=n;i++)for (int j=0;j<=n-i;j++)for (int k=0;k<=n-i-j;k++){value[trans(i,j,k)]=(biginteger){0,C[n][i]};value[trans(i,j,k)]=value[trans(i,j,k)]*C[n-i][j];value[trans(i,j,k)]=value[trans(i,j,k)]*C[n-i-j][k];for (int x=1;x<=m;x++)if (i>=a[x].a&&j>=a[x].b&&k>=a[x].c&&n-i-j-k>=a[x].n-a[x].a-a[x].b-a[x].c)addedge(trans(i,j,k),trans(i-a[x].a+a[x].x,j-a[x].b+a[x].y,k-a[x].c+a[x].z));}t=0;for (int i=0;i<=n;i++)for (int j=0;j<=n-i;j++)for (int k=0;k<=n-i-j;k++)if (!dfn[trans(i,j,k)]) tarjan(trans(i,j,k));rebuild();newgraph::solve();biginteger ans=(biginteger){0,0};for (int i=1;i<=t;i++) ans=max(ans,f[i]);if (ans.x){cout<<ans.x;int x=0;while (ans.y) tmp[++x]=ans.y%10,ans.y/=10;for (int i=17;i>=1;i--) cout<<tmp[i];}else cout<<ans.y;return 0;
}

 

转载于:https://www.cnblogs.com/Gloid/p/9613467.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI破解脑电波,准确率超80%!高度还原你眼中最美的ta

本文转自公众号&#xff1a;新智元一千个人眼中有一千个哈姆雷特。由于主观差异&#xff0c;人类的审美有千万种。对于个人偏好的观察&#xff0c;人类尚且还需要思考揣摩&#xff0c;何况是机器&#xff0c;如何做到呢&#xff1f;但最近赫尔辛基大学和哥本哈根大学的一个研究…

svn安装配置

1、安装 #rpm -q subversion #yum -y install subversion 2、创建仓库 #mkdir -p /var/svn/svnrepos #svnadmin create /var/svn/svnrepos 3、修改权限控制文件authz #cd /var/svn/svnrepos/conf/ #vi authz 4、修改账号密码文件passwd #vi passwd 5、修改svn服务配置文件svnse…

委员建议开辟多种科研资助模式,呼唤“科研悬赏制”

本文资源来源自&#xff1a;中国新闻网转自公众号&#xff1a;科奖中心“创新的力量蕴藏在全社会之中&#xff0c;创新的资源理应向全社会开放。”全国政协委员&#xff0c;民盟中央常委、宁夏区委会主委冀永强近日接受中新社记者采访时表示&#xff0c;应积极鼓励探索“科研悬…

入局智慧城市,科技互联网巨头路在何方?

来源&#xff1a;亿欧智库我国已进入智慧城市建设新时期。各大巨头先后入局&#xff0c;拓展云服务场景&#xff0c;赋能政务管理与生产生活的方方面面。未来&#xff0c;场景延展、生态构建与人文关怀将成为智慧城市发展的大趋势。随着新基建政策、“十四五”规划和二〇三五年…

什么是道德?

什么是道德&#xff1f; 热爱青年 百家号17-12-0615:23《什么是道德》 盖凡圣哲之学&#xff0c;不知有多少被后人歪曲谬解&#xff0c;长而久之&#xff0c;错误的反倒变成真理&#xff0c;害人不浅。 比如“道德”之说。绝大多数人理解成一种伦理概念。我们从小带大受到的洗脑…

马斯克的星际飞船SN10又炸了,但技术却向前迈出一大步!

来源&#xff1a;世界先进制造技术论坛(AMT)编辑&#xff1a;小艾 当地时间2021年3月3日&#xff0c;“钢铁侠”马斯克旗下太空探索公司Space X启动星际飞船&#xff08;Starship&#xff09;原型SN10的10公里飞行测试。在德克萨斯州进行高空试飞后&#xff0c;首次成功着陆&am…

Elasticsearch 5.6.5 安装head插件

head安装包&#xff0c;下载地址&#xff1a;https://github.com/mobz/elasticsearch-head/archive/master.zip head 插件不能放在elasticsearch-5.6.5文件夹里&#xff0c;head 插件需要单独放&#xff0c;单独去执行&#xff1b;所以在elasticsearch-5.6.5同级目录下解压了 h…

MEMS传感器的下一轮技术变革

来源&#xff1a;麦姆斯咨询例如&#xff0c;红外探测器和微流控器件市场就在新冠肺炎大流行中获得了现象级的大幅增长。此外&#xff0c;疫情带来的居家隔离、远程办公&#xff0c;推动了5G部署、“非接触”语音交互以及数据中心等应用发展&#xff0c;从而加速了射频滤波器、…

当量子计算遇到机器学习

作者&#xff1a; Dr.Alessandro Crimi 译者&#xff1a; 苏本如出品&#xff1a;CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;量子计算和机器学习已经成为当今炙手可热的话题。排除一些明显的炒作外&#xff0c;这当中也有一些真正的基础。随着传统计算技术的发展…

王贻芳院士:我们的科技管理过度强调竞争,缺乏稳定支持

来源&#xff1a; 科学网作者&#xff1a;倪思洁“我们中国的GDP大概很快会实现世界第一&#xff0c;我们什么时候也能在纯科学方面对世界有重大贡献呢&#xff1f;”3月7日&#xff0c;全国人大代表、中科院院士、中科院高能物理研究所所长王贻芳在江苏代表团上发言说。王贻芳…

城市大脑全球标准研究3:如何理解城市大脑中的“大脑”?

作者&#xff1a;刘锋前言&#xff1a;2015年城市大脑概念和定义提出时&#xff0c;城市大脑的本意是指应用范围&#xff0c;覆盖地域非常广大的城市级神经系统&#xff0c;是巨大的“脑“&#xff0c;这里的“大”与大数据的”大”含义相同&#xff0c;此后产业界也有认为城市…

Django 模板系统2

1. tags 2. 母版和继承   1. 母版   就是一个普通的HTML文件&#xff0c;提取多个页面的公共部分   减少代码量 修改十分方便   定义block块   2. 使用&#xff08;继承&#xff09;   在子页面中   {% entends base.html %}   重新修改block块中的内容   3…

记pbcms网站被攻击,很多标题被篡改(1)

记得定期打开网站看看哦! 被攻击后的网站异常表现:网页内容缺失或变更,页面布局破坏,按钮点击无效,...... 接着查看HTML、CSS、JS文件,发现嵌入了未知代码! 攻击1:index.html 或其他html模板页面的标题、关键词、描述被篡改(俗称,被挂马...),如下: 攻击2:在ht…

Nature撤稿!三年前微软在量子计算上的巨大胜利终究是个错误

文章来源&#xff1a;wired多年来&#xff0c;为了构建一台能够实际运行的量子计算机&#xff0c;微软一直押注一种称为马约拉纳费米子的量子粒子。三年前&#xff0c;由微软资助的研究团队在《自然》杂志发表的论文称&#xff0c;证明这种粒子确实存在&#xff0c;但这一发现遭…

分布式事务两阶段提交

前言 不知道你是否遇到过这样的情况&#xff0c;去小卖铺买东西&#xff0c;付了钱&#xff0c;但是店主因为处理了一些其他事&#xff0c;居然忘记你付了钱&#xff0c;又叫你重新付。又或者在网上购物明明已经扣款&#xff0c;但是却告诉我没有发生交易。这一系列情况都是因为…

【重磅收藏】智源发布《人工智能的认知神经基础白皮书》

来源&#xff1a;brainnews完整报告下载链接????https://event-cdn.baai.ac.cn/20210308/2020-brain-and-machine-intelligence-report.pdf&#xff08;可点击「阅读原文」查看&#xff09;《2020年人工智能的认知神经基础白皮书》指导老师&#xff1a;智源“人工智能的认知…

ConcurrentHashMap源码剖析(1.8版本)

目录 ConcurrentHashMap源码剖析数据结构NodeForwardingNodeTreeNodeTreeBin核心成员核心函数ConcurrentHashMap(int initialCapacity)initTableputgettreeifyBintryPresizetransferaddCountConcurrentHashMap源码剖析 基于jdk1.8。 参考文章&#xff1a; https://yq.aliyun.co…

2021十大关键显示科技趋势

来源&#xff1a;国际信息显示学会SID排版&#xff1a;珊妮作者&#xff1a;Sri Peruvemba&#xff0c;CEO&#xff0c;Marketer International Inc.翻译&#xff1a;SID China2021年显示技术正在发生巨变&#xff0c;随着我们进入未来十年&#xff0c;我们将拥有更加智能、紧凑…

科技议题“破圈”有利还是有弊|观点

编辑&#xff1a;赵路排版&#xff1a;郭刚作者&#xff1a;李侠最近几年时常出现科技议题进入社会领域并引起社会广泛关注的现象&#xff0c;学界通常将之称为“破圈”&#xff0c;即议题突破科技界原有的狭小圈子而进入更大的社会领域&#xff0c;并引来社会热议。客观地说&a…

学术研究发现英特尔 CPU 存在新漏洞

作者&#xff1a;Thomas Claburn译者&#xff1a;Sambodhi策划&#xff1a;施尧美国的芯片黑客又想出了一种方法&#xff0c;利用英特尔的处理器设计选择来窃取敏感数据。伊利诺伊大学香槟分校的博士生 Riccardo Paccagnella、硕士生 Licheng Luo 和助理教授 Christopher Fletc…