YYH的球盒游戏

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int h[5210],d[5210],used[5210],que[100010],last[5210];
int k=1,INF=0x7fffffff,ans=0,a[101],b[101][101],c[101];
inline int read(){
    int t=1,num=0;
    char c=getchar();
    while(c>‘9‘||c<‘0‘){if(c==‘-‘)t=-1;c=getchar();}
    while(c>=‘0‘&&c<=‘9‘){num=num*10+c-‘0‘;c=getchar();}
    return num*t;
}
struct edge{
    int to,cap,cost,next;
}g[120010];
void add(int f,int t,int c1,int c2){
    g[++k].next=h[f];h[f]=k;g[k].to=t;g[k].cap=c1;g[k].cost=c2;
    g[++k].next=h[t];h[t]=k;g[k].to=f;g[k].cap=0;g[k].cost=-c2;
}
bool spfa(int s,int t){
    memset(last,0,sizeof(last));
    memset(d,127/3,sizeof(d));INF=d[0];
    memset(used,0,sizeof(used));
    int tail,head;
    head=tail=50002;
    que[head]=s;used[s]=1;d[s]=0;
    while(head>=tail){
        int x=que[tail++];
        for(int i=h[x];i;i=g[i].next){
            if(g[i].cap&&d[x]+g[i].cost<d[g[i].to]){
                d[g[i].to]=d[x]+g[i].cost;
                last[g[i].to]=i;
                if(!used[g[i].to]){
                    if(d[g[i].to]<d[que[tail]])que[--tail]=g[i].to;
                    else que[++head]=g[i].to;
                    used[g[i].to]=1;
                }
            }
        }
        used[x]=0;
    }
    return d[t]!=INF;
}
void mcf(int t){
    int minn=INF;
    for(int i=last[t];i;i=last[g[i^1].to])minn=min(minn,g[i].cap);
    for(int i=last[t];i;i=last[g[i^1].to]){
        ans+=g[i].cost*minn;
        g[i].cap-=minn;
        g[i^1].cap+=minn;
    }
}
int main()
{
    int n,m,s,t;
    n=read();m=read();
    s=0,t=n+m+1;
    for(int i=1;i<=n;i++){a[i]=read();add(s,i,a[i],0);}
    for(int i=1;i<=m;i++){c[i]=read();add(n+i,t,c[i],0);}
    for(int i=1;i<=m;i++){
        int liu=-1;
        for(int j=1;j<=n-c[i];j++){
            liu+=2;
            add(n+i,t,1,liu);
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            b[i][j]=read();
            add(i,n+j,1,-b[i][j]);
        }
    }
    for(int i=1;i<=n;i++)add(i,t,INF,0);
    while(spfa(s,t))mcf(t);
    printf("%d\n",-ans);
    return 0;
}

本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。

时间: 2024-10-04 01:06:27

YYH的球盒游戏的相关文章

YYH的球盒游戏(NOIP模拟赛Round 6)

原题传送门 这题的算法优化真是博大精深. 具体我们一个一个来讲. 我们先看这道题的算法,(这..裸的费用流啊...) 然后我们发现负边(好吧,其实没有什么用.spfa可以跑) 首先所有的球都要向源点连费用0,流量为球的数量的边 然后我们考虑每一个球都要到汇点,所以从盒子向汇点连费用0,流量inf的边. 对于每一个球向每一个盒子连费用为-c(c为收益),流量为1的边. 重点来了:怎么处理多放? 我们已知一个公式 n^2-(n-1)^2=n*2-1; 所以我们从每一个盒子向汇点连流量为1,费用为2*

梦里花落知多少

No.1 无论怎样,该过去的都走了,18天以来第一次不再紧张,终于能够静下心来,好好面对自己. No.2 出发之前,我告诉自己,胜也欣然,败也从容.但是当我真的遇见了,一切的从容和理智都被失望与不甘碾成了细碎的灰尘. 考完回家,自己一个人,看着很亮的灯光,忽然积蓄的一切就一下子溢满出来了,想妈妈. 后来和lyh说话,发现自己交错了程序,已经不知道再说什么了,果然,自己这种毛病还是没有改掉.那个时候更多的是对自己的失望吧. No.3 出发之前的几天,大家都很浮躁. 出发的前一天晚上,妈妈专门过来陪

拼图游戏-从基础到应用玩转手势变化。

小方块相关的类 主界面的布局 打开图片选择图片 拼图的各个小方块的形成过程 小方块的点击事件和手势判断过程 游戏开始打乱方块以及游戏结束时弹出Toast提示的方法 相信大家在小的时候都玩过拼图游戏,现如今,手机普及,能在手机上玩的游戏越来越多,于是乎,重温小时候,编写这个简易拼图游戏,而且也能进一步加深android的一些基础知识. 老规矩,先是效果图~: 这里我把为了演示效果,把图片打乱的很少,在代码里可以更改. 首先,有个默认的图片,可以用来拼图,也可以选择你喜欢的图片进行拼图,拼图的过程会

用Kotlin破解Android版微信小游戏-跳一跳

前言 微信又更新了,从更新日志上来看,似乎只是一次不痛不痒的小更新.不过,很快就有人发现,原来微信这次搞了个大动作--在小程序里加入了小游戏.今天也是朋友圈被刷爆的缘故. 看到网上 有人弄了一个破解版的,于是自己也跟着网上的案例整了一下,感觉挺有意思的. 游戏如下: 来玩游戏 劳动成果 跳一跳 微信小程序可以玩游戏了,我们来破解一下<跳一跳>这个官方出品的小游戏吧. 思路 用usb调试安卓手机,用adb截图并用鼠标测量距离,然后计算按压时间后模拟按压. $ adb shell input sw

20170913自制猜数字游戏

/* 猜数字:系统随机生成一个四位数,请根据下列判断猜出来 A:数值正确,位置正确 B:数值正确,位置不正确 C:数值不正确 */ #include<stdio.h> #include<time.h> #include<stdlib.h> #pragma warning (disable:4996) #define pUCharHead unsigned char * //以数组形式返回n个无重复的随机数,范围可指定[min,max] pUCharHead GenNoR

洛谷P1199 三国游戏

题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之间有一个"默契值",表示若此两位武将作为一对组合作战时,该组合的威力有多大.游戏开始前,所有武将都是自由的(称为自由武将,一旦某个自由武将被选中作为某方军队的一员,那么他就不再是自由武将了),换句话说,所谓的自由武将不属于任何一方. 游戏开始,小涵和计算机要从自由武将中挑选武将组成自己的军

游戏开发 系统app开发游戏定制开发找谁

梦幻珍珠港理财拆分游戏系统软件开发怎么做?找[江生:185-2911-8412 微电]. 梦幻珍珠港拆分游戏平台开发.梦幻珍珠港理财全网模式开发.梦幻珍珠港收益模式介绍开发. 梦幻珍珠港拆分游戏系统源码搭建平台!!我们是软件开发,玩家勿扰!非平台客服,玩家勿扰!] 游戏规则: 一.开发新会员要从您的库房扣除3 03颗珍珠,体系扣除5颗珍珠,新会员有298颗珍珠. 二.推荐老友,推荐人能够得到第一代会员的2%,第二代会员的1%,第三代会员的0.5%,一代的收益就是5.96颗珍珠奖赏(可转换为等量可

游戏服务器开发需要学习的技术

一,游戏服务器编程语言的选择 所谓的游戏服务器编程语言其实有很多,基本上任何一种语言都可以作为游戏服务器的编程语言.这需要根据自己游戏的类型和要求加以选择.比如C++,Java ,Erlang,go等等.目前我用过的只有C++和Java.但是以Java为主.所以接下来就以自己的经验,谈谈以Java为核心的游戏服务器开发技术体系. Java目前作为游戏服务器开发语言已经很是普遍.但是大多数是作为页游或手游的服务器,而端游戏一般选择C++,因为端游对服务器的性能要求相对比较高一些.两种语言各有利弊.

赛码网算法: 格子游戏

格子游戏 题目描述 有n个格子,从左到右放成一排,编号为1-n.共有m次操作,有3种操作类型:1.修改一个格子的权值,2.求连续一段格子权值和,3.求连续一段格子的最大值.对于每个2.3操作输出你所求出的结果. 输入输入第一行两个整数,n表示格子个数,m表示操作次数,n和m中间用空格隔开:接下来输入n行,每行一个整数表示一个格子的权值接下来输入m行,每行有三个整数,中间用空格隔开:第一个是选择的操作类型1-3,第二和第三个整数是操作格子的编号.样例输入3 37892 1 33 1 32 1 2输