D. DZY Loves Modification
来源:互联网 发布:小米网络音响 闹钟 编辑:程序博客网 时间:2024/06/05 14:24
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.
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 a single integer — the maximum possible total pleasure value DZY could get.
2 2 2 21 32 4
11
2 2 5 21 32 4
11
For the first sample test, we can modify: column 2, row 2. After that the matrix becomes:
1 10 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
- codeforces#FF(div2) D DZY Loves Modification
- codeforces 255#D. DZY Loves Modification
- DZY Loves Modification CodeForces 447D 贪心
- DZY Loves Modification
- DZY Loves Modification CodeForces
- DZY Loves Modification CodeForces
- Codeforces Round #FF (Div. 2)D. DZY Loves Modification
- CF 255 DIV2 D DZY Loves Modification(优先队列)
- Codeforces Round #FF (Div. 2) D. DZY Loves Modification
- Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列
- 【杂题】 codeforces 446B - DZY Loves Modification
- CodeForces 446B DZY Loves Modification
- CodeForces 446-B. DZY Loves Modification
- Codeforces 446B DZY Loves Modification
- DZY Loves Modification(优先队列)
- Codeforces Round #FF (Div. 1) B. DZY Loves Modification
- codeforces 446B DZY Loves Modification(枚举)
- 如何学会编辑文章快速收录?
- Android KEYCODE键值对应大全
- Android对sdcard操作
- C++ 项目3 文件加结构体实现实用系统
- HDU-4500-小Q系列故事——屌丝的逆袭
- D. DZY Loves Modification
- 1065. A+B and C (64bit)
- [数论] POJ 3126 Prime Path
- sql 中分割字符串的方法
- [HDOJ 3708][Vjudge 41282] Warrior Lady [动态规划]
- 第八章 进程控制 fork函数
- HDU 1548 A strange lift (BFS或最短路)
- Android中Cocos2d-X引擎响应按键消息
- Hive配置项的含义详解