【CF717G】Underfail 费用流
【CF717G】Underfail
题意:赌城拉斯维起司的赌场最近推出了一种新式赌法。它的玩法是由庄家(Joker)设局,赌徒只需要交付一定数额的赌资即可入局。具体地,Joker将给出一个长度为 $n$ 的由小写字母组成的字符串 $s$ ,再给出 $m$ 个赏金串 $t_1,t_2...t_m$ ,每个赏金串都有一个价值 $w_i$ 。如果 $s$ 的某个子串 $s[l..r]$ 与 $t_i$ 相同,则赌徒可以将 $s[l..r]$ 中的所有字符取走一个,并获得 $w_i$ 的赏金。每个字符最多可以被取走 $k$ 次(注意取完之后两边的字符串是不拼到一起的,想什么呢!)。特别地,每个赏金串只能在同一位置使用一次。即:如果 $s[l..r]=t_i$ ,则赌徒不可以连续在 $s[l..r]$ 处取走两遍的 $t_i$ 并获得 $2w_i$ 的赏金。
一旁的Jack忍不住了,他也想进去捞一笔。不过首先他想知道Joker是否是在坑人(坑鼠),所以他想问问你,他最多能从中获得多少赏金。
$1\le n\le 500,1\le m\le 100,1\le len\{t_i\}\le 100,0\le w_i\le 100,1\le k\le 100$
题解:傻逼费用流~
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int n,m,cnt,S,T,ans;
int to[100000],nxt[100000],head[510],cost[100000],flow[100000],pe[510],pv[510],dis[510],inq[510];
char s1[510],s2[510];
queue<int> q;
inline void add(int a,int b,int c,int d)
{
to[cnt]=b,cost[cnt]=c,flow[cnt]=d,nxt[cnt]=head[a],head[a]=cnt++;
to[cnt]=a,cost[cnt]=-c,flow[cnt]=0,nxt[cnt]=head[b],head[b]=cnt++;
}
inline int bfs()
{
memset(dis,0xc0,sizeof(dis));
dis[S]=0,q.push(S);
int i,u;
while(!q.empty())
{
u=q.front(),inq[u]=0,q.pop();
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]]) q.push(to[i]),inq[to[i]]=1;
}
}
return dis[T]>0;
}
int main()
{
scanf("%d%s%d",&n,s1+1,&m);
int i,j,k,a,b;
memset(head,-1,sizeof(head));
for(i=1;i<=m;i++)
{
scanf("%s%d",s2,&b),a=strlen(s2);
for(j=1;j+a-1<=n;j++)
{
for(k=0;k<a;k++) if(s1[j+k]!=s2[k]) break;
if(k==a) add(j,j+a,b,1);
}
}
scanf("%d",&a);
for(i=0;i<=n;i++) add(i,i+1,0,a);
S=0,T=n+1;
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;
}
【CF717G】Underfail 费用流的更多相关文章
- hdu-5988 Coding Contest(费用流)
题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- POJ2195 Going Home[费用流|二分图最大权匹配]
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22088 Accepted: 11155 Desc ...
- BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 960 Solved: 5 ...
- 洛谷 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 ...
- Codeforces 730I [费用流]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给两行n个数,要求从第一行选取a个数,第二行选取b个数使得这些数加起来和最大. 限制条件是第一行选取了某个数的条件下,第二行不能选取对应位置的数. ...
- zkw费用流+当前弧优化
zkw费用流+当前弧优化 var o,v:..] of boolean; f,s,d,dis:..] of longint; next,p,c,w:..] of longint; i,j,k,l,y, ...
- 【BZOJ-4213】贪吃蛇 有上下界的费用流
4213: 贪吃蛇 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 58 Solved: 24[Submit][Status][Discuss] Desc ...
- 【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 ...
- [bzoj4514]数字配对[费用流]
今年SDOI的题,看到他们在做,看到过了一百多个人,然后就被虐惨啦... 果然考试的时候还是打不了高端算法,调了...几天 默默地yy了一个费用流构图: 源连所有点,配对的点连啊,所有点连汇... 后 ...
随机推荐
- 报错:bash: pip: command not found
$ wget https://bootstrap.pypa.io/get-pip.py$ python get-pip.py$ pip -V #查看pip版本
- 连接mysql 出现:java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'.
数据测试的时候出现: 网上查资料说的是mysql5.x 版本和 8.x版本的区别: 5.7版本是:default_authentication_plugin=mysql_native_password ...
- C# 6 的新特性~
原文地址 Mads Torgersen,微软 C# 程序管理者,它发布了一个视频,描述即将到来的下一个 C# 版本--C# 6.在 C# 6 的新特性之间,Mads 主要提到了 getter-only ...
- RHEL磁盘修复
0. 1.基础工具:e2label /device/xxx [new label name] 显示/设定设备的label名称 2.e2fsck 修复工具,用-b 指定备用的superblock位置 ...
- Android + Eclipse + PhoneGap 2.9.0 安卓最新环境配置,部分资料整合网上资料,已成功安装.
前言:最近心血来潮做了一个以品牌为中心的网站,打算推出本地服务o2o应用.快速开发手机应用,最后选择了phonegap,这里我只是讲述我安装的过程,仅供大家参考. 我开发的一个模型http://www ...
- SpringBoot集成redis的LBS功能
下面的代码实现了添加经纬度数据 和 搜索经纬度数据的功能: import java.util.List; import com.longge.goods.dto.BuildingDto; import ...
- Mongodb 笔记 - 性能及Java代码
性能 以下数据都是在千兆网络下测试的结果 写入 数据量的增大会导致内存占满, 因为mongodb会将数据尽可能地载入内存, 索引占用的空间也很可观非安全模式下, 速度取决于内存是否占满能差一个数量级, ...
- 12C -- ORA-01033: ORACLE initialization or shutdown in progress
初装oracle 12.2 rac数据库. 登录RAC数据库中第1节点 $ sqlplus '/as sysdba' SQL> select name,open_mode from v$pdbs ...
- adb命令使用总结
1.启动/停止 启动 adb server 命令: adb start-server (一般无需手动执行此命令,在运行 adb 命令时若发现 adb server 没有启动会自动调起.) 停止 adb ...
- 【ARM】arm系列知识框架
[ARM编程模型] 硬件: 电路原理图 软件: 体系结构, 指令集, 寄存器组 [ARM编程技术] 汇编/C语言 编译, 链接, 烧写和调试 windows: MDK linux : gcc [AR ...