[TYVJ1338] QQ农场

描述

这个农场和游戏中略有不同。土地实际上是一个边长为N的正方形,由N*N块土地组成。
在每块土地上,都种有一种农作物。如果他选择摘取一块土地上的农作物,就能获得一个固定的利润(当然,这个利润是正数)。不同土地上的利润多半是不同的。
贪心的Sandytea本想摘取所有土地上的农作物。但是正当他准备行动时,却被告知不允许摘取了两块有公共边的土地上的作物,否则就会被主人的狗发现。
Sandytea想知道,在不被狗抓住的前提下,他能获得的最大利益是多少。

输入格式

第一行:一个整数N,表示土地是一个边长为N的正方形。
下面N行:每行N个正整数,描述了各块土地上的农作物的单位价值。

输出格式

输出一行,包含一个整数,为最大的收益。

测试样例1

输入


7 7 
54 54

输出

61

备注

数据范围:
有10分的数据满足:N≤6
另有20分的数据满足:N≤13
另有30分的数据满足:N≤50
另有40分的数据满足:N≤200
所有数据满足:每块土地上作物的价值不超过100。

最小割:最大化利益=最小化损失
把网格黑白染色,

由源点向黑格连容量为格点权值的边,白格向汇点连容量为格点权值的边,每个黑格子向相邻的格子连容量为inf的边

把黑格子割到源点表示采摘该格作物,否则不采摘

把白格子割到汇点表示采摘该格作物,否则不采摘

为什么相邻格子要连INF的边呢?

题目说,不能采相邻格子的作物,而如果连INF的边,就说明这条边必不可能被割断,相邻格子就必不可能都能被采摘(否则S到T连通)

注意,必须从黑格(即为与源点连边的格子)向白格(即为与汇点连边的格子)连边

不能从白格向黑格连边或黑白格互相连边(即从黑格向白格连边,白格也向黑格连边)

为什么呢?

如果互相连边,那么下图1,3两个点就变相有了限制关系,而事实上并不是取了1号点就不能取3号点(1号点只与2号点相邻)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int INF=1999999999;
int h[1000000],next[1000000],cap[1000000],to[1000000],k=1;
int level[40100],que[40100],head,tail,iter[40100],n;
int x[4]={-1,0,1,0},y[4]={0,-1,0,1};
void ins(int u,int v,int c){next[++k]=h[u];h[u]=k;to[k]=v;cap[k]=c;}
int get(int i,int j){return (i-1)*n+j;}
bool bfs(int S,int T)
{
    memset(level,0,sizeof(level));
    head=tail=0;que[tail++]=S;level[S]=1;
    while(head<tail)
    {
        int u=que[head++];
        for(int i=h[u];i;i=next[i])
        {
            int v=to[i];
            if(!level[v]&&cap[i])
            {
                level[v]=level[u]+1;que[tail++]=v;
            }
        }
    }
    if(!level[T])return 0;return 1;
}
int dfs(int u,int T,int f)
{
    if(u==T)return f;
    int used=0;
    for(int &i=iter[u];i;i=next[i])
    {
        int v=to[i];
        if(level[v]==level[u]+1&&cap[i])
        {
            int w=dfs(v,T,min(cap[i],f-used));used+=w;
            if(w)
            {
                cap[i]-=w;cap[i^1]+=w;if(f==used)return f;
            }
        }
    }
    return used;
}
int dinic(int S,int T)
{
    int flow=0;
    while(1)
    {
        for(int i=0;i<=n*n+1;i++)iter[i]=h[i];
        if(!bfs(S,T))return flow;flow+=dfs(S,T,INF);
    }
}
int main()
{
    scanf("%d",&n);int S=0,T=n*n+1,tot=0;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    {
        int v;scanf("%d",&v);tot+=v;
        if(i%2==j%2){ins(get(i,j),T,v);ins(T,get(i,j),0);}
        else
        {
            for(int k=0;k<4;k++)
            {
                int ii=i+x[k],jj=j+y[k];if(ii<1||ii>n||jj<1||jj>n)continue;
                ins(get(i,j),get(ii,jj),INF);ins(get(ii,jj),get(i,j),0);
            }
            ins(S,get(i,j),v);ins(get(i,j),S,0);
        }
    }
    cout<<tot-dinic(S,T);
    return 0;
 } 
时间: 2024-10-09 21:57:19

[TYVJ1338] QQ农场的相关文章

基于多线程的C#版QQ农场

基于多线程的C#版QQ农场(图形图像,文件和流,多线程,Web服务) 课程链接:http://www.dwz.cn/wkkAv 咨询QQ2110053820 课程讲师:蝈蝈 课程分类:.Net 适合人群:初级 课时数量:35课时 更新程度:完毕 用到技术:文本编辑器的实现.图形图像编程.多线程编程.文件和流 涉及项目:QQ农场 课程简介: 模拟QQ农场是以农场为背景的模拟经营类游戏,前身为"五分钟"团队开 发的开心农场,后面则嵌入在Q间和QQ校友(腾讯朋友)平台中的应用程序 游戏.游戏

【TYVJ】QQ农场(最大流+最大权闭合图)

http://tyvj.cn/Problem_Show.aspx?id=1338 时间才排到rank7,还不快啊囧.isap我常数都写得那么小了... 最大权闭合图看我另一篇博文吧 此题很明显的模型. 首先我们先染色,使整个图黑白相间,其中我们只需要在黑色点向对应的上下左右白色节点连边,很明显,这些节点都有权值,我们需要求的是最大权,那么就按我的博文那样来做即可. 用sum-最小割就是答案. #include <cstdio> #include <cstring> #include

new与malloc比较,QQ农场与大草原?

前几天看到微信群里有人在讨论new与malloc的不同之处,看到有人说malloc不如new,细细看他所列举的为什么new比malloc好的原因,感觉很有道理,但是转念一想,突然间我又觉得语言这种东西为什么一定要分出个谁好谁差呢?任何一个就比如说是英语和汉语,汉语中的一个成语,英语却要一个句子来表达,但是有的时候英语表达又要比汉语表达方便(当然这只是我的个人见解).在C语言或者C++之中也一样,有时候可以有多种表达方式可以达到相同的效果,就比如C语言之中,有时候用指针方便,有时候使用数组方便,但

天天芒果微信农场平台开发

天天芒果微信农场平台开发,开发系统找:陈经理136-4273-5391 天天芒果农场系统,天天芒果农场模式,天天芒果农场平台开发,天天芒果开发系统,天天芒果软件开发.本文章是做系统开发咨询的,并非官方平台运营商,玩平台者勿扰!谢谢配合! 你是否还记得QQ农场半夜偷菜的情景?是否还想重温插上稻草人吓小鸟.养只狗狗看菜园的乐趣?也是否想再看看鱼池里五彩七色的鱼儿自由游弋?不需要你卖任何产品,也没有物流的烦恼,也没有保质期,更不会影响你的正常工作:每天24小时随时都可以在家里网上操作. 盈利模式.利润

复刻偷菜OR重启社交?全民农场想干嘛

真正的社交游戏需要玩家从被迫去沟通,到乐意去沟通,甚至陌生人或半熟人,通过这种交流,会逐步变成生活中的朋友,这看似简单的系统,其实恰恰颠覆了过去社交游戏单纯"偷菜"这样功利化的呈现. 文/张书乐 7月10日,由腾讯魔方工作室倾力打造的农场休闲手游<全民农场>正式通过应用宝首发.对于这款游戏,游戏圈立刻有了一个联想--偷菜在移动互联网上复活了? 玩法变了 不偷菜去卖菜行吗? 诚然,和QQ农场同是腾讯魔方工作室的出品,<全民农场>会给人们一种错觉,这是否是该工作室想

什么是三级分销农场游戏?农场游戏开发的前景怎么样?

说起当前比较火的农场游戏,大家心中的看法不一.到底什么是三级分销农场游戏?农场游戏开发前景怎么样?一下是个人见解: 首先借用一个制度来聊一聊三级分销农场游戏. 开一块地500苹果币买一颗果树,果树前多少小时是幼苗,过了幼苗期才会结果,买过果树种树需要激活码,激活码一个20苹果币. 币种 金果:可提现(动态奖金) 果树:500苹果币 果子:按比例80%购物,20%能够提现(比例做成活的) 奖项 一.静态奖:每天每块地2%(果子,静态果子按比例80%购物,20%能够提现) 二.动态奖:直推一代10%

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

个人经验,记忆力不行 有些还没有整理

8年PHP 9年JAVA 10年C++(已没用) 10年ASM(已没用 ) 4年C#求一份兼职 技能树:php,java,javascript,C#,delphi,c++/c,汇编,mysql,oracle框架经验:thinkphp,bootcss,jq,mfc,wsdk,jfinal项目经验:PHP:商城系统,网教系统,分分彩/时时彩,游戏道具销售系统java:银行中控系统 IM服务端C++/c:FTP客户端工具 FTP服务端工具 QQ离线挂机 QQ农场挂机 IOCP棋牌服务端(非接口部分)汇

Magicodes.NET框架之路——产品之路(谈谈产品管理)

虽然Magicodes.NET现在还不属于产品,但是却不妨碍她想成为产品的心. 为什么突然有了此篇,这篇不是空穴来风,而是我思考良久的结果: 为了让大家知道我在干什么,我想干什么,我将要干什么还有我干了什么 为了让大家清楚Magicodes.NET的产品迭代 为了更好地收集以及管理Bug&需求 为了让我和大家清楚Magicodes.NET的方向 为了更好地团队协作,也为了将来团队的扩张 总之,基于这样或那样的原因,于是有了此篇. 本篇为个人想法与规划,希望和大家多多交流,共同成长. WorkTi