jubeeeeeat

题目链接

总时间限制: 
1000ms

内存限制: 
256000kB
描述

众所周知,LZF很喜欢打一个叫Jubeat的游戏。这是个音乐游戏,游戏界面是4×4的方阵,会根据音乐节奏要求玩家按下一些指定方块(以下称combo)。LZF觉得这太简单了,于是自己仿了个游戏叫Jubeeeeeat,唯一不同之处就是界面大小,Jubeeeeeat的界面为n×n的方阵。

在某一刻,界面同时出现了若干个combo。LZF终于觉得有些困难了,但毕竟LZF不是普通人,他有很多只手。LZF的手分为m只“肉质手”和q只“意念手”。顾名思义,“肉质手”是实际存在的手,每只肉质手都有5根手指,每根手指能按一个combo,但每只手的速度都不同,受限于此,LZF的每只肉质手的控制范围是一个固定大小的正方形。“意念手”即虚无之手,每只手只有1根手指,但控制范围为全局。

现在LZF想知道,他最多能按下多少个combo。

输入
输入文件名为 jubeeeeeat.in。 
第1行输入三个正整数n,m,q。
接下来是一个n×n的01矩阵,描述combo的位置,1为combo。
最后m行每行三个正整数xi,yi,ai,分别表示第i只肉质手掌控区域左上方块的行、列和边长。(行、列从1数起)
输出
输出文件名为 jubeeeeeat.out。 
输出一个正整数,表示最多能按下的combo数。
样例输入
3 1 3
1 0 1
1 1 1
1 0 1
1 1 2
样例输出
6
提示
【数据说明】
对于20%的数据,n=5,m=2,q=2;
对于50%的数据,1≤n≤20,1≤m, q≤50;
对于100%的数据,1≤n≤40,1≤m, q≤300,1≤xi, yi≤n,1≤xi+ai-1, yi+ai-1≤n。
/*
意念手可以先不考虑,最后特判即可,对于肉质手,可以用网络流跑一边
首先一个肉质手有五根手指,所以将肉质手拆点,两点间容量为5,肉质手与他所能按的键中有combe的键连一条容量为1的边
由于按每个combe都只会有1的贡献,所以所有的combe向汇点连容量为1的边
原点向每只肉质手连容量为INF的边
*/
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#define maxn 2501
using namespace std;
int n,m,q,ans,num=,head[maxn],cur[maxn],lev[maxn],map[][],s,t,sum;
struct node{
int to,pre,cap;
}e[];
void Insert(int from,int to,int v){
e[++num].to=to;
e[num].cap=v;
e[num].pre=head[from];
head[from]=num;
}
bool bfs(){
queue<int>q;
q.push(s);
for(int i=;i<=t;i++)cur[i]=head[i],lev[i]=-;
lev[s]=;
while(!q.empty()){
int now=q.front();q.pop();
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(e[i].cap>&&lev[to]==-){
lev[to]=lev[now]+;
q.push(to);
if(to==t)return ;
}
}
}
return ;
}
int dinic(int now,int flow){
if(now==t)return flow;
int rest=,delta;
for(int &i=cur[now];i;i=e[i].pre){
int to=e[i].to;
if(e[i].cap>&&lev[to]==lev[now]+){
delta=dinic(to,min(flow-rest,e[i].cap));
if(delta){
e[i].cap-=delta;e[i^].cap+=delta;
rest+=delta;
if(rest==flow)break;
}
}
}
if(rest!=flow)lev[now]=-;
return rest;
}
int main(){
scanf("%d%d%d",&n,&m,&q);
for(int i=;i<=n;i++)for(int j=;j<=n;j++){
scanf("%d",&map[i][j]);
if(map[i][j])sum++;
}
int x,y,z;
for(int i=;i<=m;i++){
Insert(s,i,);
Insert(i,s,);
}
for(int i=;i<=m;i++){
Insert(i,i+m,);
Insert(i+m,i,);
}
s=,t=n*n+m*+;
for(int i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
for(int j=x;j<x+z;j++)
for(int k=y;k<y+z;k++)
if(map[j][k]){
Insert(i+m,(j-)*n+k+m*,);
Insert((j-)*n+k+m*,i+m,);
}
}
for(int i=;i<=n*n;i++){
Insert(*m+i,t,);
Insert(t,*m+i,);
}
while(bfs())ans+=dinic(s,);
int w=min(q,sum-ans);
ans+=w;
printf("%d",ans);
}

Openjudge jubeeeeeat的更多相关文章

  1. OpenJudge——0003:jubeeeeeat

    OpenJudge——0003:jubeeeeeat 描述 众所周知,LZF很喜欢打一个叫Jubeat的游戏.这是个音乐游戏,游戏界面是4×4的方阵,会根据音乐节奏要求玩家按下一些指定方块(以下称co ...

  2. jubeeeeeat

    http://cdqz.openjudge.cn/2016/0003/ 总时间限制: 1000ms 内存限制: 256000kB 描述 众所周知,LZF很喜欢打一个叫Jubeat的游戏.这是个音乐游戏 ...

  3. 【OpenJudge 8463】Stupid cat & Doge

    http://noi.openjudge.cn/ch0204/8463/ 挺恶心的一道简单分治. 一开始准备非递归. 大if判断,后来发现代码量过长,决定大打表判断后继情况,后来发现序号不对称. 最后 ...

  4. 【OpenJudge 191】【POJ 1189】钉子和小球

    http://noi.openjudge.cn/ch0405/191/ http://poj.org/problem?id=1189 一开始忘了\(2^{50}\)没超long long差点写高精度Q ...

  5. 【OpenJudge 1665】完美覆盖

    http://noi.openjudge.cn/ch0405/1665/?lang=zh_CN 状压水题,手动转移 #include<cstdio> #include<cstring ...

  6. 【OpenJudge 1793】矩形覆盖

    http://noi.openjudge.cn/ch0405/1793/ 好虐的一道题啊. 看数据范围,一眼状压,然后调了好长时间QwQ 很容易想到覆盖的点数作为状态,我用状态i表示至少覆盖状态i表示 ...

  7. OpenJudge 2990:符号三角形 解析报告

    2990:符号三角形 总时间限制:  1000ms       内存限制:  65536kB 描述 符号三角形的第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“ ...

  8. OpenJudge 7624 山区建小学

    在openjudge似乎无法凭题号搜到题...? 总时间限制:  1000ms  内存限制:  65536kB 描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任 ...

  9. [OpenJudge 3066]随机序列

    [OpenJudge 3066]随机序列 试题描述 Bob喜欢按照如下规则生成随机数: 第一步:令a[0] = S, 当n = 0: 第二步:a[n+1] = (a[n]*A+B)%P: 第三步:如果 ...

随机推荐

  1. leetcode 24. Swap Nodes in Pairs(链表)

    Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...

  2. PS 滤镜— —Twirl Filter

    clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...

  3. C语言访问MCU寄存器的两种方式

    转自http://blog.csdn.net/liming0931/article/details/7752248 单片机的特殊功能寄存器SFR,是SRAM地址已经确定的SRAM单元,在C语言环境下对 ...

  4. 音频压缩(Speex使用&Opus简介)--转

    博客地址:http://blog.csdn.net/kevindgk GitHub地址:https://github.com/KevinDGK/MyAudioDemo 一简介 二局域网语音配置 三Sp ...

  5. ACdream1430SETI(后缀自动机)

    问题: Amateur astronomers Tom and Bob try to find radio broadcasts of extraterrestrial civilizations i ...

  6. NYOJ-求逆序数 ----------------待解决,WA

    描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 现在,给你一个N个元素的序列,请你判断出它的逆序数 ...

  7. a标签中href="javacript:;" href="javacript:void(0);" href="#"区别

    在使用<a>标签时,经常会绑定其他事件比如onclick,这时候我们会给<a>标签的href属性赋值为“#”,“javacript:;”,“javacript:void(0); ...

  8. Foreman-porxy负载均衡搭建

    本文接上篇puppet负载均衡的环境实验. Foreman-proxy可以采用四层或者七层负载,都可以实现,在foreman的web界面添加一个smart-proxy,后端多个真实foreman-pr ...

  9. spark提交模式

    spark基本的提交语句: ./bin/spark-submit \ --class <main-class> \ --master <master-url> \ --depl ...

  10. 在浏览器中输入url并回车后发生了什么?

    1 解析url url主要由以下几个部分组成: 1 传输协议 2 服务器 3 域名 4 端口 5 虚拟目录 6 文件名 7 锚 8 参数 2 DNS(域名)解析 找到域名对应的ip 3 浏览器与网站建 ...