D. DZY Loves Modification
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

As we know, DZY loves playing games. One day DZY decided to play with a n × m matrix. To be more precise, he decided to modify the matrix with exactly k operations.

Each modification is one of the following:

  1. Pick some row of the matrix and decrease each element of the row by p. This operation brings to DZY the value of pleasure equal to the sum of elements of
    the row before the decreasing.
  2. Pick some column of the matrix and decrease each element of the column by p. This operation brings to DZY the value of pleasure equal to the sum of elements
    of the column before the decreasing.

DZY wants to know: what is the largest total value of pleasure he could get after performing exactly k modifications? Please, help him to calculate this
value.

Input

The first line contains four space-separated integers n, m, k and p (1 ≤ n, m ≤ 103; 1 ≤ k ≤ 106; 1 ≤ p ≤ 100).

Then n lines follow. Each of them contains m integers
representing aij (1 ≤ aij ≤ 103) —
the elements of the current row of the matrix.

Output

Output a single integer — the maximum possible total pleasure value DZY could get.

Sample test(s)
input
2 2 2 2
1 3
2 4
output
11
input
2 2 5 2
1 3
2 4
output
11
Note

For the first sample test, we can modify: column 2, row 2. After that the matrix becomes:

1 1
0 0

For the second sample test, we can modify: column 2, row 2, row 1, column 1, column 2. After that the matrix becomes:

-3 -3
-2 -2

文章大意是给你一个n * m的矩阵,你能够进行k次操作.

操作1:把一行的每一个元素都减去p,你能够获得该行全部元素和(操作之前)的pleasure

操作2:把一列的每一个元素都减去p,你能够获得该列全部元素和(操作之前)的pleasure

问你最大能够获得的pleasure是多少

思路:枚举操作1所进行的次数,每次取能获得最大的行,用优先队列维护,要注意预处理,否则会超时

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
typedef long long LL;
using namespace std;
int A[1005][1005];
LL R[1005],C[1005];
LL s1[1000005],s2[1000005];
void get_C(int n,int i,int (*A) [1005])
{
LL s=0;
for(int j=1;j<=n;j++)
s+=A[j][i];
C[i]=s;
}
void get_R(int m,int i,int (*A)[1005])
{
LL s=0;
for(int j=1;j<=m;j++)
s+=A[i][j];
R[i]=s;
}
int main()
{
int n,m,k,p;
while(scanf("%d%d%d%d",&n,&m,&k,&p)==4)
{
LL s=0;
s1[0]=s2[0]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&A[i][j]);
LL sum=-1000000000000009;
priority_queue<LL>q1;
priority_queue<LL>q2;
for(int i=1;i<=n;i++){get_R(m,i,A);q1.push(R[i]);}
for(int i=1;i<=m;i++){get_C(n,i,A);q2.push(C[i]);}
for(int j=1;j<=k;j++)
{
LL temp=q1.top();
q1.pop();
s1[j]=s1[j-1]+temp;
temp-=p*m;
q1.push(temp);
}
for(int j=1;j<=k;j++)
{
LL temp=q2.top();
q2.pop();
s2[j]=s2[j-1]+temp;
temp-=p*n;
q2.push(temp);
}
for(int i=0;i<=k;i++)
{
s=s1[i]+s2[k-i];
sum=max(sum,s-LL(i)*p*(k-i));
}
printf("%I64d\n",sum);
}
return 0;
}

D. DZY Loves Modification的更多相关文章

  1. Codeforces Round #FF (Div. 2) D. DZY Loves Modification 优先队列

    D. DZY Loves Modification time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  2. [CodeForces - 447D] D - DZY Loves Modification

    D - DZY Loves Modification As we know, DZY loves playing games. One day DZY decided to play with a n ...

  3. Codeforces 447D - DZY Loves Modification

    447D - DZY Loves Modification 思路:将行和列分开考虑.用优先队列,计算出行操作i次的幸福值r[i],再计算出列操作i次的幸福值c[i].然后将行取i次操作和列取k-i次操 ...

  4. Codeforces Round #FF (Div. 1) B. DZY Loves Modification 优先队列

    B. DZY Loves Modification 题目连接: http://www.codeforces.com/contest/446/problem/B Description As we kn ...

  5. Codeforces Round #FF (Div. 1) B. DZY Loves Modification

    枚举行取了多少次,如行取了i次,列就取了k-i次,假设行列单独贪心考虑然后相加,那么有i*(k-i)个交点是多出来的:dpr[i]+dpc[k-i]-i*(k-i)*p 枚举i取最大值.... B. ...

  6. B. DZY Loves Modification

    B. DZY Loves Modification time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  7. CF446B DZY Loves Modification 优先队列

    As we know, DZY loves playing games. One day DZY decided to play with a n × m matrix. To be more pre ...

  8. Codeforces Round #FF/#255 D DZY Loves Modification --贪心+优先队列

    题意:给你一个矩阵,每次选某一行或者某一列,得到的价值为那一行或列的和,然后该行每个元素减去p.问连续取k次能得到的最大总价值为多少. 解法: 如果p=0,即永远不减数,那么最优肯定是取每行或每列那个 ...

  9. CodeForces 446B DZY Loves Modification

    题意: k次操作  每次选择一行或一列  得到所选数字的和  并将所选数字同一时候减去p  问最多得到多少 思路: 重点在消除行列间的相互影响 因为每选一行全部列所相应的和都会-p  那么假设选了i次 ...

随机推荐

  1. Go语言语法汇总

    最近看了看GoLang,把Go语言的语法总结了一下,做个快速参考 数据类型 var varName type,var var1,var2… type,var varName type = Value, ...

  2. 函数模板的载体-HPP

    在C++中,我们通常将声明放在.h头文件中,将具体的实现代码放在.cpp文件中.但是函数模板通常不这么做,函数模板是将其声明和实现都放在.hpp文件中.hpp是Header Plus Plus的缩写, ...

  3. 2014第7周1Web安全概念学习

    晚上没有加班,回来后尝试几个感觉不错的行动:1.列出当天最有意义的五件事:2.靠墙站,纠正自己的姿势同时锻炼眼睛:这两点以后也要坚持成为每天的习惯.然后我又陷入了知乎的各种信息中,一个多小时的时间悄悄 ...

  4. 一封推荐信——android培训机构

    我,男,23岁,即将毕业的大四学生,就读于天津一所二本院校,计算机科学与技术专业.大一期间,进入新校园,和同学到各个宿舍推销陶瓷杯,国美电器饮水机促销员,组团蹬车游市区,不断地去探索.尝试,追求内心向 ...

  5. .net Mvc Controller 接收 Json/post方式 数组 字典 类型 复杂对象

    原文地址:http://www.cnblogs.com/fannyatg/archive/2012/04/16/2451611.html ------------------------------- ...

  6. Android 获取系统内置Intent

    1,掉web浏览器 Uri myBlogUri = Uri.parse("http://www.yzmanga.com"); returnIt = new Intent(Inten ...

  7. 二探ListView

    使用draw9patch 打开内置terminal 输入CD C:\Users\Gaby\AppData\Local\Android\sdk 在该目录下输入draw9patch 导入图片,开始绘制 本 ...

  8. #include <hash_set>

    哈希查找,不需要排序,适用于精确查找,比二分查找更快 #define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS #include <iostream&g ...

  9. c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别

    本文来自:http://blog.csdn.net/tangjunping/article/details/5443337 以前经常为这几种数据类型转换方式而迷茫,这次为了彻底搞清它们之间的区别和优缺 ...

  10. JS(移动端)自己封装移动端一些常用方法

    /** * Created by Administrator on 2016/7/14. */ /*命名空间*/ window.lcf = {}; /*监听过渡结束的方法*/ lcf.transiti ...