HDU-4862-Jump
比今年第二个问题,第一个田间学校更多。在游戏中可以做不做,卡在K一旦有。阅读解决一个问题后,才做。内置图所示k这的确是很聪明倍。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
const int inf=1<<29;
const int maxn=210;
const int maxm=maxn*maxn*5;
int e,st,des,head[maxn],pnt[maxm],nxt[maxm],cost[maxm],flow[maxm],dist[maxn],pre[maxn];
int n,m,k;
char s[110][110];
bool vis[maxn];
queue<int> q;
void AddEdge(int u,int v,int c,int f)
{
pnt[e]=v;nxt[e]=head[u];cost[e]=c;flow[e]=f;head[u]=e++;
pnt[e]=u;nxt[e]=head[v];cost[e]=-c;flow[e]=0;head[v]=e++;
}
bool Spfa()
{
for(int i=st;i<=des+1;i++)
{
pre[i]=-1;
dist[i]=inf;
}
dist[st]=0;
q.push(st);
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i!=-1;i=nxt[i])
if(flow[i]&&dist[pnt[i]]>dist[u]+cost[i])
{
dist[pnt[i]]=dist[u]+cost[i];
pre[pnt[i]]=i;
if(!vis[pnt[i]])
{
vis[pnt[i]]=1;
q.push(pnt[i]);
}
}
}
return dist[des]!=inf;
}
void mincostflow()
{
int ans=0,sum=0;
while(Spfa())
{
int mini=inf;
for(int i=pre[des];i!=-1;i=pre[pnt[i^1]])
mini=min(mini,flow[i]);
for(int i=pre[des];i!=-1;i=pre[pnt[i^1]])
{
flow[i]-=mini;
flow[i^1]+=mini;
}
sum+=mini;
ans+=dist[des]*mini;
}
if(sum==n*m)
printf("%d\n",-ans);
else
printf("-1\n");
}
void Build()
{
st=0,des=2*n*m+1;
int p=2*n*m+2;
memset(head,-1,sizeof(head));
AddEdge(st,p,0,k);
for(int i=1;i<=n*m;i++)
{
AddEdge(st,i,0,1);
AddEdge(n*m+i,des,0,1);
AddEdge(p,n*m+i,0,1);
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
for(int k=j+1;k<m;k++)
{
if(s[i][j]==s[i][k])
AddEdge(i*m+j+1,n*m+i*m+k+1,-(s[i][j]-'0'-(k-j-1)),1);
else
AddEdge(i*m+j+1,n*m+i*m+k+1,k-j-1,1);
}
for(int k=i+1;k<n;k++)
{
if(s[i][j]==s[k][j])
AddEdge(i*m+j+1,n*m+k*m+j+1,-(s[i][j]-'0'-(k-i-1)),1);
else
AddEdge(i*m+j+1,n*m+k*m+j+1,k-i-1,1);
}
}
}
void solve()
{
Build();
mincostflow();
}
int main()
{
int T,cas=1;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<n;i++)
scanf("%s",s[i]);
printf("Case %d : ",cas++);
solve();
}
return 0;
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
HDU-4862-Jump的更多相关文章
- HDU 4862 Jump(更多的联合培训学校1)(最小费用最大流)
职务地址:pid=4862">HDU4862 最小费用流做的还是太少. 建图想不出来. . . 直接引用官方题解的话吧... 最小K路径覆盖的模型.用费用流或者KM算法解决,构造二部图 ...
- HDU 4862 Jump(最小K路径覆盖)
输入一个n×m网格图,每个结点的值为0-9,可以从任意点出发不超过k次,走完每个点且仅访问每个结点一次,问最终的能量最大值.不可全部走完的情况输出-1. 初始能量为0. 而结点(x,y)可以跳跃到结点 ...
- HDU 4862 Jump 费用流
又是一个看了题解以后还坑了一天的题…… 结果最后发现是抄代码的时候少写了一个负号. 题意: 有一个n*m的网格,其中每个格子上都有0~9的数字.现在你可以玩K次游戏. 一次游戏是这样定义的: 你可以选 ...
- HDU 4862 Jump 任意起点最大权K链不相交覆盖
你可以从任意起点开始起跳最多K次 每次跳你可以选择往右或者往下跳 从(x1,y1)跳到(x2,y2) 消耗的能量是曼哈顿距离-1 但是如果每次跳的起点和终点格子里的数字是相同的为X的话你会得到X能量 ...
- HDU 4862 JUMP 最小费用最大流
2014 多校的B题,由于我不怎么搞图论,当时碰到这个题目,我怎么想都没往网络流方面弄,不过网络流真的是个好东西,对于状态多变,无法用动规或者数据结构来很好表示的时候,非常有用 这个题目要求每个点一定 ...
- 【HDU 2014 Multi-University Training Contest 1 1002】/【HDU 4862】Jump
多校训练就这么华丽丽的到了 ,于是乎各种华丽丽的被虐也開始了. 这是多校的1002; 最小费用最大流. 题目大意: 有n*m个方格,每一个方格都一个的十进制一位的数.你能够操作K次. 对于每一次操作, ...
- HDU 4862
http://acm.hdu.edu.cn/showproblem.php?pid=4862 #include <iostream> #include <cstdio> #in ...
- hdu 4862 KM算法 最小K路径覆盖的模型
http://acm.hdu.edu.cn/showproblem.php?pid=4862 选t<=k次,t条路要经过全部的点一次而且只一次. 建图是问题: 我自己最初就把n*m 个点分别放入 ...
- HDU 4862(费用流)
Problem Jump (HDU4862) 题目大意 给定一个n*m的矩形(n,m≤10),每个矩形中有一个0~9的数字. 一共可以进行k次游戏,每次游戏可以任意选取一个没有经过的格子为起点,并且跳 ...
- HDOJ 4862 Jump
K路径覆盖问题,最小费用最大流.... ,费用0,Y部有N*M个节点,每一个节点向汇点连一条边,流量1,费用0,假设X部的节点x能够在一步之内到达Y部的节点y,那么就连边x->y,费用为从x格子 ...
随机推荐
- 在C#环境中动态调用IronPython脚本(二)
一.Python数据类型与C#数据类型的对应 Python中数据类型中的简单类型,例如int,float,string可以对应到C#环境中的int32,double,string,这些对应比较直观,P ...
- HDU--3081--Marriage Match II--最大匹配,匈牙利算法
Marriage Match II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- Codeforces Round #256 (Div. 2) D. Multiplication Table 二分法
D. Multiplication Table time limit per test 1 second memory limit per test 256 megabytes input st ...
- HDU 1698 Just a Hook (段树更新间隔)
Problem Description In the game of DotA, Pudge's meat hook is actually the most horrible thing for m ...
- MAC 10.10 apache 服务器配置
mac中自带了apache服务器, 如果需要在mac上使用apache服务器, 只需要配置并启动服务器即可. mac 10.10 中自带的apache版本是 2.4 mac 10.9 中自带的apac ...
- ASP.NET2.0组件控件开发视频 初体验
原文:ASP.NET2.0组件控件开发视频 初体验 ASP.NET2.0组件控件开发视频 初体验 录了视频,质量不是很好,大家体验下.我会重新录制的 如果不清楚,可以看看http://v.youku. ...
- 从"分层二进制输出"至"解决二进制树深度"总结
本文研究的摘要,欢迎转载,但请注明出处:http://write.blog.csdn.net/postedit/41964669 近期在刷LettCode上的算法题,发现好多题目的解题思路大体是一致的 ...
- web压力测试-pylot
我已经写在使用前Web Bench做压力測试.http://blog.csdn.net/jacson_bai/article/details/41143713 但这个測试,測试结果非常好.缺点就是,无 ...
- 在Sql中使用Try Catch
原文:在Sql中使用Try Catch 今天在写sql中出现了!我想在sql使用trycatch吧! 哎..但是语法又记不住了! 那就清楚我们的google大师吧! 嘿,网上关于在sql中使用Try ...
- 持久化redis
redis持久化 Redis持久化原理: Redis支持两种持久化:RDB和AOF模式 一.名词解释: RDB:持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snap ...