DZY Loves Modification

Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u

Submit



Status



Practice



CodeForces 446B

Description

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:



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.

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 Input

Input

2 2 2 2

1 3

2 4

Output

11

Input

2 2 5 2

1 3

2 4

Output

11

Hint

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

<span style="color:#3333ff;">/*
_______________________________________________________________________________________ author : Grant yuan
time : 2014.7.21
algorithm : priority_queue
explain : 首先对行和列在1到k的范围内分别求解,然后求出一个满足i和k-i的最大值,
注意终于的结果中减去反复计算的,还有会測试大于int类型的数据。
—————————————————————————————————————————————————————————————————————————————————————————
*/ #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<functional>
using namespace std;
#define INF 999999999; priority_queue<__int64>q1;
priority_queue<__int64>q2;
__int64 m,n,k,p,h;
__int64 a[1003][1003];
__int64 s1[1003],s2[1003];
__int64 sum1[1000003],sum2[1000003];
__int64 res,ans,hh; int main()
{
cin>>n>>m>>k>>p;
ans=INF;
ans=-ans*ans;
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
memset(sum1,0,sizeof(sum1));
memset(sum2,0,sizeof(sum2));
while(!q1.empty())
q1.pop();
while(!q2.empty())
q2.pop(); for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
scanf("%I64d",&a[i][j]);
s1[i]+=a[i][j];
s2[j]+=a[i][j];} for(int i=0;i<n;i++)
q1.push(s1[i]); for(int i=0;i<m;i++)
q2.push(s2[i]); for(int i=1;i<=k;i++)
{
h=q1.top();q1.pop();
if(i==1)sum1[i]=h;
else sum1[i]=sum1[i-1]+h;
h-=m*p;
q1.push(h);
}
for(int i=1;i<=k;i++)
{
h=q2.top();q2.pop();
if(i==1)sum2[i]=h;
else sum2[i]=sum2[i-1]+h;
h-=n*p;
q2.push(h);
} for(int i=0;i<=k;i++)
{
res=sum1[i]+sum2[k-i];
ans=max(ans,res-i*p*(k-i));
} cout<<ans<<endl;
return 0; }
</span>

【组队赛三】-D 优先队列 cf446B的更多相关文章

  1. 用C++的类做三种优先队列的实现

    学过数据结构的都知道优先队列这种东西,普通的队列是依据入队顺序,先入队的先出队,而优先队列则是依照键值,键值越大(或越小),就越先出队. 所以,优先队列基本支持push,pop,empty,size, ...

  2. 【组队赛三】-C cf448B

    Suffix Structures Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit S ...

  3. 暑假练习赛 004 E Joint Stacks(优先队列模拟)

    Joint StacksCrawling in process... Crawling failed Time Limit:4000MS     Memory Limit:65536KB     64 ...

  4. 51nod 1689 逛街(优先队列)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1689 题意: 题意: 枚举终点,这样就确定路上的花费,接下来只需要计算进 ...

  5. 2016 多校联赛7 Joint Stacks (优先队列)

    A stack is a data structure in which all insertions and deletions of entries are made at one end, ca ...

  6. HDU 1103 Flo's Restaurant(模拟+优先队列)

    Flo's Restaurant Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. hdu 5818 Joint Stacks (优先队列)

    Joint Stacks Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  8. 【STL】栈+队列+优先队列(详)+ 拯救行动题解

    一.栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元 ...

  9. 算法导论——lec 12 平摊分析与优先队列

    在平摊分析中,运行一系列数据结构操作所须要的时间是通过对运行的全部操作求平均得出.反映在不论什么情况下(即最坏情况下),每一个操作具有平均性能.掌握了平摊分析主要有三种方法,聚集分析.记账方法.势能方 ...

随机推荐

  1. Redhat Linux NFS配置

    Linux下,All deviceis file,所有的设备都是文件.当我们需要把某些文件夹就或者文件共享给其他用户,就可以使用网络文件系统. 本文介绍Redhat Linux下的NFS配置. 在使用 ...

  2. 【转】Redis 总结精讲 看一篇成高手系统-4

    https://www.cnblogs.com/rjzheng/p/9096228.html 本文围绕以下几点进行阐述 1.为什么使用redis2.使用redis有什么缺点3.单线程的redis为什么 ...

  3. Cantor展开式

    X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,a为整数,并且0<=ai<i(1<=i<=n).这就是康托展开 ...

  4. Eclipse系列:如何设置Eclipse关联JDK源码和文档

    一.设置Eclipse关联JDK源码 1.打开Eclipse-->Windows-->Preferences       2. 在弹出的Preferences对话框中,Java--> ...

  5. jQuery 发送验证码倒计时按钮

    { wait:90, hsTime:function(that){ if (this.wait == 0) { $('#hsbtn').removeAttr("disabled") ...

  6. (转)Unity导出Android在高通骁龙800以上CPU概率性崩溃解决方法研究

    Android上的奇葩问题真的是太多了,开始测试反馈说游戏在某些Android手机上随机crash,后来经过详细的测试发现随机闪退的手机都是搭载了高通骁龙800以上的CPU.然后连上真机当crash的 ...

  7. 逻辑回归应用之Kaggle泰坦尼克之灾

    机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾 标签: 机器学习应用 2015-11-12 13:52 3688人阅读 评论(15) 收藏 举报 本文章已收录于:  机器学习知识库  分类 ...

  8. Jquery的分页插件

    Jquery的分页插件, 用起来还不错. 来自: http://flaviusmatis.github.io/simplePagination.js/   下载地址: https://github.c ...

  9. Intellij IDEA 配置Subversion插件时效解决方法

    在使用Intellij的过程中,突然发现svn不起效了,在VCS–>Checkout from Version Control中也未发现Subversion这一项.如下图: 一.原因查找 经过分 ...

  10. TinyCore Nginx server with php-cgi and vsftpd

    http://blog.matchgenius.com/tinycore-nginx-server-with-php-cgi-and-vsftpd/ Create fast testing serve ...