【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了一个费用流构图: 源连所有点,配对的点连啊,所有点连汇... 后 ...
随机推荐
- Kafka与常见消息队列的对比
Kafka与常见消息队列的对比 RabbitMQ Erlang编写 支持很多的协议:AMQP,XMPP, SMTP, STOMP 非常重量级,更适合于企业级的开发 发送给客户端时先在中心队列排队.对路 ...
- C#SpinWait和volatile一点温习
今天看ConcurrentQueue<T> 源码发现里面居然没有用到lock,我记得ConcurrentDictionary里面是有lock的,lock的是字典里面每一个key,但是Con ...
- Backbone hello world
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http ...
- Attempt to present <TestViewController2: 0x7fd7f8d10f30> on <ViewController: 0x7fd7f8c054c0> whose view is not in the window hierarchy!
当 storyboard里面的 按钮 即连接了 类文件里面的点击方法 又 连接了 storyboard里 另一个 控制器的 modal 就会出现类似Attempt to present & ...
- Swift 值类型和引用类型的内存管理
1.内存分配 1.1 值类型的内存分配 在 Swift 中定长的值类型都是保存在栈上的,操作时不会涉及堆上的内存.变长的值类型(字符串.集合类型是可变长度的值类型)会分配堆内存. 这相当于一个 &qu ...
- Springmvc 整合 jetbrick 实例
应用环境: <jetbrick.version>1.2.8</jetbrick.version> <antlr4-runtime.version>4.2.2< ...
- Orace 12.2 ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_21"
一个测试环境的12.2.0.1数据库后台alert不断报出以下错误信息: Errors in file /d12/app/oracle/diag/rdbms/test/test/trace/test_ ...
- unity3d的playmaker插件使用教程,三、对象出入触发,声音播放
对象出入触发是游戏常见的情形.包含同一时候声音播放 首先建立进去区域.新建一个立方体,去掉mesh render. 而且选中 is trigger同意进入 样例里用了unity3d的第一人视角控制,可 ...
- [教程]-三种空格unicode(\u00A0,\u0020,\u3000)表示的区别
1.不间断空格\u00A0,主要用在office中,让一个单词在结尾处不会换行显示,快捷键ctrl+shift+space ; 2.半角空格(英文符号)\u0020,代码中常用的; 3.全角空格(中文 ...
- 推荐几个Windows工具软件: ASuite - 便携的程序启动器
主页: http://asuite.sourceforge.net 下载: http://sourceforge.net/projects/asuite/ ASuite is a lightweigh ...