济南学习 Day 3 T3 am
选数字 (select)
Time Limit:3000ms Memory Limit:64MB
题目描述
LYK 找到了一个 n*m 的矩阵,这个矩阵上都填有一些数字,对于第 i 行第 j 列的位置上
的数为 ai,j。
由于它 AK 了 noip2016 的初赛,最近显得非常无聊,便想到了一个方法自娱自乐一番。
它想到的游戏是这样的: 每次选择一行或者一列, 它得到的快乐值将会是这一行或者一列的
数字之和。之后它将该行或者该列上的数字都减去 p(之后可能变成负数) 。如此,重复 k
次,它得到的快乐值之和将会是它 NOIP2016 复赛比赛时的 RP 值。
LYK 当然想让它的 RP 值尽可能高,于是它来求助于你。
输入格式(select.in)
第一行 4 个数 n,m,k,p。
接下来 n 行 m 列,表示 ai,j。
输出格式(select.out)
输出一行表示最大 RP 值。
输入样例
2 2 5 2
1 3
2 4
输出样例
11
数据范围
总共 10 组数据。
对于第 1,2 组数据 n,m,k<=5。
对于第 3 组数据 k=1。
对于第 4 组数据 p=0。
对于第 5,6 组数据 n=1,m,k<=1000。
对于第 7,8 组数据 n=1,m<=1000,k<=1000000。
对于所有数据 1<=n,m<=1000,k<=1000000,1<=ai,j<=1000,0<=p<=100。
样例解释
第一次选择第二列,第二次选择第二行,第三次选择第一行,第四次选择第二行,第五
次选择第一行,快乐值为 7+4+2+0+-2=11。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define INF 100000000000000LL
#define ll long long
#define R register
priority_queue<int> q1,q2;
ll xx[],yy[],x[],y[];
ll n,m,k,p,ans;
void anwser()
{
xx[]=;yy[]=;
for(ll i=;i<=n;i++)
q1.push(x[i]);
for(ll i=;i<=k;i++)
{
R ll t=q1.top();
xx[i]=xx[i-]+t;
q1.pop();
q1.push(t-p*m);
}
for(int j=;j<=m;j++)
q2.push(y[j]);
for(ll i=;i<=k;i++)
{
R ll t=q2.top();
yy[i]=yy[i-]+t;
q2.pop();
q2.push((t-p*n));
}
ans=-INF;
for(int i=;i<=k;i++)
ans=max(ans,xx[i]+yy[k-i]-p*(k-i)*i); }
int main()
{
scanf("%d%d%d%d",&n,&m,&k,&p);
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
ll xxx;
scanf("%ll",&xxx);
x[i]+=xxx;
y[j]+=xxx;
}
}
anwser(); printf("%d",ans); return ;
}
思路:首先我们可以得知如果你选择了i行,则你一定选择了k-i列,我们对每一行每一列都处理出一个前缀和,然后只要是这i行和这(k-i)列,答案一定最优,和选取顺序无关
那么,再开两个数组,用堆维护一下就可以了
济南学习 Day 3 T3 am的更多相关文章
- 济南学习 Day 3 T3 pm
仙人掌(cactus)Time Limit:1000ms Memory Limit:64MB题目描述LYK 在冲刺清华集训(THUSC) !于是它开始研究仙人掌,它想来和你一起分享它最近研究的结果. ...
- 济南学习 Day 2 T3 pm
它[问题描述]N个人坐成一圈,其中第K个人拿着一个球.每次每个人会以一定的概率向左边的人和右边的人传球.当所有人都拿到过球之后,最后一个拿到球的人即为胜者.求第N个人获胜的概率. (所有人按照编号逆时 ...
- 济南学习 Day 2 T3 am
[问题描述]m× m的方阵上有n棵葱,你要修一些栅栏把它们围起来.一个栅栏是一段沿着网格建造的封闭图形(即要围成一圈) .各个栅栏之间应该不相交.不重叠且互相不包含.如果你最多修k个栅栏,那么所有栅栏 ...
- 济南学习 Day 5 T3 am
[题目描述] 众所不知,rly现在不会玩国际象棋.但是,作为一个OIer,rly当然做过八皇后问题.在这里再啰嗦几句,皇后可以攻击到同行同列同对角线,在 n*n的棋盘中,摆放n个皇后使它们互相不能攻击 ...
- 济南学习 Day 5 T3 pm
科普一下: φ函数的值 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数.φ(1)= ...
- 济南学习 Day1 T3 pm
[问题描述]小 Q 对计算几何有着浓厚的兴趣.他经常对着平面直角坐标系发呆,思考一些有趣的问题.今天,他想到了一个十分有意思的题目:首先,小 Q 会在x轴正半轴和y轴正半轴分别挑选
- 济南学习 Day1 T3 am
凝视[问题描述]背包是个好东西,希望我也有.给你一个二维的背包,它的体积是N*M.现在你有一些大小为1× 2和1×3的物品,每个物品有自己的价值.你希望往背包里面装一些物品,使得它们的价值和最大,问最 ...
- 济南学习 Day5 T3 晚
回文串(palindromes) [题目描述] 判断是否能将字符串S分成三段非空回文串. [输入说明] 第一行一个整数T,表示数据组数. 对于每一个组,仅包含一个由小写字母组成的串. [输出说明] 对 ...
- 济南学习D3T1__线性筛和阶乘质因数分解
[问题描述] 从1− N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. [输入格式] 第一行一个数字N. [输出格式] 一行,一个整数代表答案对100000007取模之后的 ...
随机推荐
- iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)
iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController) 这里我们就直接上实例: 一:新建一个项目singleV ...
- 了解PHP中Stream(流)的概念与用法(转)
Stream是PHP开发里最容易被忽视的函数系列(SPL系列,Stream系列,pack函数,封装协议)之一,但其是个很有用也很重要的函数.Stream可以翻译为“流”,在Java里,流是一个很重要的 ...
- JavaScript针对Dom相关的优化心得
JavaScript针对Dom相关的优化心得 组内同时总结的关于javascript性能优化注意些节.记录一下. 1. 批量增加 Dom 尽量使用修改 innerHTML 的方式而不是用 append ...
- 快速排序算法-C语言实现
注:本篇内容为翻译,之所以选择这篇进行翻译原因是该文章含有动画,能够更加直观地展示快速排序.同时,可以仔细看一下代码,代码中把结构化的思想给予了更加充分地表现.按照功能进行模块划分的思想得到了彻底地贯 ...
- jackson使用示例
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. Jackson 2.x版提供了三个JAR包供下载: 1. Core库:strea ...
- GCD三种队列
:dispatch_get_global_queue 后台执行队列 :dispatch_get_main_queue 主队列 :dispatch_queue_create("test&quo ...
- 3. Android框架和工具之 xUtils(ViewUtils )
1. ViewUtils 作用: 完全注解方式就可以进行UI绑定和事件绑定. 无需findViewById和setClickListener等. 2. UI绑定 和 事件绑定 (1)UI绑定 下面我們 ...
- label
label的使用 以前只知道使用并没太注意一些细节 话说<label><input type="checkbox"/>5星</label>就可以 ...
- batchExportPNG.py不是我的代码
#coding=gbk#@author lifc,20140806#批量制作输出专题图import arcpy,os,time,math #testpath=raw_input("testp ...
- NSOperation与GCD之间的关系
NSOperation与GCD的相同之处 1.NSOperation和NSOperationQueue实现多线程的步骤: 先将需要执行的操作封装到一个NSOperation对象中. 然后将NSOper ...