【组队赛三】-D 优先队列 cf446B
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的更多相关文章
- 用C++的类做三种优先队列的实现
学过数据结构的都知道优先队列这种东西,普通的队列是依据入队顺序,先入队的先出队,而优先队列则是依照键值,键值越大(或越小),就越先出队. 所以,优先队列基本支持push,pop,empty,size, ...
- 【组队赛三】-C cf448B
Suffix Structures Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit S ...
- 暑假练习赛 004 E Joint Stacks(优先队列模拟)
Joint StacksCrawling in process... Crawling failed Time Limit:4000MS Memory Limit:65536KB 64 ...
- 51nod 1689 逛街(优先队列)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1689 题意: 题意: 枚举终点,这样就确定路上的花费,接下来只需要计算进 ...
- 2016 多校联赛7 Joint Stacks (优先队列)
A stack is a data structure in which all insertions and deletions of entries are made at one end, ca ...
- HDU 1103 Flo's Restaurant(模拟+优先队列)
Flo's Restaurant Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 5818 Joint Stacks (优先队列)
Joint Stacks Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- 【STL】栈+队列+优先队列(详)+ 拯救行动题解
一.栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元 ...
- 算法导论——lec 12 平摊分析与优先队列
在平摊分析中,运行一系列数据结构操作所须要的时间是通过对运行的全部操作求平均得出.反映在不论什么情况下(即最坏情况下),每一个操作具有平均性能.掌握了平摊分析主要有三种方法,聚集分析.记账方法.势能方 ...
随机推荐
- Grid++Report
ylbtech-Miscellaneos:Grid++Report 1. 关于Grid++Report返回顶部 Grid++Report 可用于开发桌面C/S报表与WEB报表(B/S报表),C/S报表 ...
- PHP 字符串包含判断
遇到了这个问题.记录一下.用strpos查找字符串来进行字符串包含判断. <?php //$res = strpos("hello", "hx"); $r ...
- go语言之进阶篇数组越界导致panic
1.数组越界导致panic 示例: package main import "fmt" func testa() { fmt.Println("aaaaaaaaaaaaa ...
- go语言之进阶篇通过switch实现类型断言
1.通过switch实现类型断言 示例: package main import "fmt" type Student struct { name string id int } ...
- 解决 win7 注册com组件失败问题
解决 win7 注册com组件失败问题 运行:regsvr32 xxx.ocx 提示:模块 "xxx.ocx" 已加载,但对调用 dllregisterserver 的调用失败,错 ...
- Sqlite的多表连接更新
最近处理一个较大数据的sqlite库,基础表300万条,结果表30万条左右,我的笔记本跑起来还算流畅.最后结果,需要两个表连接,把另一个表的计算结果更新过来,却遇到麻烦.sqliter并不支持常见的连 ...
- pdo_mysql安装不了或是安装后用不了的修复教程
目前发现wdOS及lanmp_wdcp的RPM包安装在部分系统下安装后,在安装pdo_mysql时无法安装或安装后无法使用的问题 如在安装时提示下如下 regenerate PHP parsers.c ...
- Oracle导入excel数据快速方法
Oracle导入excel数据快速方法 使用PLSQL Developer工具,这个可是大名鼎鼎的Oracle DBA最常使用的工具. 在单个文件不大的情况下(少于100000行),并且目的 ...
- Discuz常见小问题-如何人为地添加用户并分配小组
进入后台,在用户-添加用户中可以人为添加用户并分配权限
- ArcGIS 后台服务器抛出异常
ArcGIS工具箱是一个非常经典的工具应用,它就像一个做过很多项目.技术不断丰富的大神.以至于,现在ESIR与ITT公司合作,搞得新版的ENVI都有工具箱这样的界面了. 抛出异常 并不是每一个问题都能 ...