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. 分享知识-快乐自己:Shrio 案例Demo概述

    Shiro 权限认证核心: POM:文件: <!--shiro-all--> <dependency> <groupId>org.apache.shiro</ ...

  2. cf 429B Working out(简单dp)

    B. Working out time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  3. 与STL文件相关的各类学习地址

    几个网址: 1.STL :https://en.wikipedia.org/wiki/STL_(file_format)#ASCII_STL 2.一个博客的文章地址: 三维图形数据格式 STL的 读取 ...

  4. Java丨验证码图片去除干扰像素,方便验证码的识别

    1.先来看看效果: 原图 除去干扰像素后 2.解析代码: 1).读取文件夹里面的图片 String fileName = "picture"; BufferedImage img ...

  5. java中变量的分类

    •按被声明的位置划分: –成员变量:方法外部.类的内部定义的变量 –局部变量:方法或语句块内部定义的变量        –注意:类外面(类对应的大括号外面)不能有变量的声明 •按所属的数据类型划分: ...

  6. 将session存入数据库,memcache的方法

    //存入数据库 <?phpif(!$con = mysql_connect('localhost','root','123456')){    die('连接数据库失败');}$link = m ...

  7. Eclipse 反编译插件安装jad【转】

    原文地址:http://tangmingjie2009.iteye.com/blog/1916992 Eclipse的反编译插件一直在用jad,感觉很不错. 刚下了个新版的eclipse,配置jad的 ...

  8. loj516dp一般看规律

    STL 这...我只能说是...考得是... STL的正确用法? #include<iostream> #include<cstdio> #include<cstdlib ...

  9. 代码实现跟控制器跳转到storyBoard

  10. Framework配置错误

    转自:http://blog.csdn.net/ked/article/details/25052955 VS2012命令提示符无法使用的解决方法 打开VS2012命令提示符时报错“ERROR: Ca ...