【CF884F】Anti-Palindromize

题意:定义一个串是反回文的,当且仅当对于1<=i<=len,$a_i!=a_{len-i+1}$。

现在给出一个长度为n的串S(n是偶数),希望得到一个串T,满足T是S的一个排列,且T是反回文的。

给出数组vi,定义一个排列T的美观度为:$\sum\limits_{S_i=T_i}v_i$

现在想知道,所有合法的T中,美观度最大的是多少。

n<=100

题解:直接上建图方法吧。图一共分为4层:S,所有字符,n/2个位置,T

1.S -> 所有字符 容量是这个字符的出现次数,费用0

2.字符a -> 位置b 容量是1

  如果b和n-b+1的字符都不是a,那么费用为0
  如果b或n-b+1的字符是a,那么费用为v[b]或v[n-b+1]
  如果b和n-b+1的字符都是a,那么费用为max(v[b],v[n-b+1])

3.所有位置 -> T 容量2,费用0

跑最大费用最大流即可。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std;
int n,cnt,S,T,ans;
int to[10000],nxt[10000],head[110],dis[110],pv[110],pe[110],cost[10000],flow[10000],inq[110];
int v[110],s[30];
char str[110];
queue<int> q;
inline void add(int a,int b,int c,int d)
{
to[cnt]=b,nxt[cnt]=head[a],cost[cnt]=c,flow[cnt]=d,head[a]=cnt++;
to[cnt]=a,nxt[cnt]=head[b],cost[cnt]=-c,flow[cnt]=0,head[b]=cnt++;
}
inline int bfs()
{
int i,u;
memset(dis,0xc0,sizeof(dis));
q.push(S),dis[S]=0;
while(!q.empty())
{
u=q.front(),q.pop(),inq[u]=0;
for(i=head[u];i!=-1;i=nxt[i]) if(dis[to[i]]<dis[u]+cost[i]&&flow[i])
{
dis[to[i]]=dis[u]+cost[i],pe[to[i]]=i,pv[to[i]]=u;
if(!inq[to[i]]) inq[to[i]]=1,q.push(to[i]);
}
}
return dis[T]>=-100000;
}
int main()
{
scanf("%d%s",&n,str+1),S=0,T=n/2+27;
int i,j;
for(i=1;i<=n;i++) s[str[i]-'a'+1]++,scanf("%d",&v[i]);
memset(head,-1,sizeof(head));
for(j=1;j<=26;j++)
{
add(S,j,0,s[j]);
for(i=1;i+i<=n;i++)
{
if(str[i]-'a'+1==j&&str[n-i+1]-'a'+1==j) add(j,i+26,max(v[i],v[n-i+1]),1);
else if(str[i]-'a'+1==j) add(j,i+26,v[i],1);
else if(str[n-i+1]-'a'+1==j) add(j,i+26,v[n-i+1],1);
else add(j,i+26,0,1);
}
}
for(i=1;i+i<=n;i++) add(i+26,T,0,2);
while(bfs())
{
ans+=dis[T];
for(i=T;i!=S;i=pv[i]) flow[pe[i]]--,flow[pe[i]^1]++;
}
printf("%d",ans);
return 0;
}

【CF884F】Anti-Palindromize 费用流的更多相关文章

  1. hdu-5988 Coding Contest(费用流)

    题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Ot ...

  2. POJ2195 Going Home[费用流|二分图最大权匹配]

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22088   Accepted: 11155 Desc ...

  3. BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]

    3130: [Sdoi2013]费用流 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 960  Solved: 5 ...

  4. 洛谷 1004 dp或最大费用流

    思路: dp方法: 设dp[i][j][k][l]为两条没有交叉的路径分别走到(i,j)和(k,l)处最大价值. 则转移方程为 dp[i][j][k][l]=max(dp[i-1][j][k-1][l ...

  5. Codeforces 730I [费用流]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给两行n个数,要求从第一行选取a个数,第二行选取b个数使得这些数加起来和最大. 限制条件是第一行选取了某个数的条件下,第二行不能选取对应位置的数. ...

  6. zkw费用流+当前弧优化

    zkw费用流+当前弧优化 var o,v:..] of boolean; f,s,d,dis:..] of longint; next,p,c,w:..] of longint; i,j,k,l,y, ...

  7. 【BZOJ-4213】贪吃蛇 有上下界的费用流

    4213: 贪吃蛇 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 58  Solved: 24[Submit][Status][Discuss] Desc ...

  8. 【BZOJ-3638&3272&3267&3502】k-Maximum Subsequence Sum 费用流构图 + 线段树手动增广

    3638: Cf172 k-Maximum Subsequence Sum Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 174  Solved: 9 ...

  9. [bzoj4514]数字配对[费用流]

    今年SDOI的题,看到他们在做,看到过了一百多个人,然后就被虐惨啦... 果然考试的时候还是打不了高端算法,调了...几天 默默地yy了一个费用流构图: 源连所有点,配对的点连啊,所有点连汇... 后 ...

随机推荐

  1. [转] fitnesse中的Map处理

    http://blog.csdn.net/doubeizhucele/article/details/42263887 fintesse会把!{}标记的变量视为HashTable对象,展现到页面上的将 ...

  2. 将windbg设置为默认调试器命令

    前提条件:安装好windbg软件(默认安装位置) 以截取组态王运行系统崩溃为例: 64位系统0.文件更新替换 将Touchvew.exe以及Touchvew.pdb覆盖替换C:\Program Fil ...

  3. Visual Code 调用Chrome 浏览HTML

    Code 使用快捷键:Ctrl+Shit+B 然后再Task.json,替换以下: { "version": "0.1.0", "command&qu ...

  4. 添加额外的源, 使得yum可以安装更多的软件

    RHEL 官方扩展源 yum localinstall http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch. ...

  5. Xcode提交图片出错:Commit failed not under version control (1)

    xcode的svn提交图片经常会出问题,这不我又碰到了,记录下: 修改的是xx@2x.png之类的图标,commit的时候报错 The working copy “ios” failed to com ...

  6. Hibernate_day02讲义_使用Hibernate完成CRM客户管理中查询所有客户的操作

  7. ios开发之--使用AFN上传3.1.0上传视频,不走成功回调原因及解决方法

    在测试接口的时候,发现接口称走走了,但是success的回调不走,检查了下代码,发现没有初始化下面两个方法: manage.responseSerializer = [AFHTTPResponseSe ...

  8. PostgreSQL存储过程(1)-基于SQL的存储过程

    什么是SQL函数? SQL函数包体是一些可执行的SQL语言.同时包含1条以上的查询,但是函数只返回最后一个查询(必须是SELECT)的结果. 除非SQL函数声明为返回void,否则最后一条语句必须是S ...

  9. Linux应急响应(三):挖矿病毒

    0x00 前言 ​ 随着虚拟货币的疯狂炒作,利用挖矿脚本来实现流量变现,使得挖矿病毒成为不法分子利用最为频繁的攻击方式.新的挖矿攻击展现出了类似蠕虫的行为,并结合了高级攻击技术,以增加对目标服务器感染 ...

  10. 网站前端性能优化之javascript和css

    之前看过Yahoo团队写的一篇关于网站性能优化的文章,文章是2010年左右写的,虽然有点老,但是很多方面还是很有借鉴意义的.关于css的性能优化,他提到了如下几点: CSS性能优化 1.把样式表置于顶 ...