CF446B DZY Loves Modification 题解
Link.
Description.
给定 的矩阵,进行 次操作。
每次操作选定一行或一列,获得这行、列的和的价值,并把整行、列减去 。
问 次操作后价值和最大值。
Nailve Solution.
胡了个假的贪心。
Solution.
发现无论选哪行,对列的贡献都是相同的,所以可以行列拆开。
发现行与列之间顺序是无关的,因为都是 ,行和行、列和列之间也肯定无关。
所以只需要关心选了多少行、选了多少列就行了。
选多少行的贡献肯定是可以贪心计算的,直接用优先队列就行了。
Coding.
点击查看代码
//是啊,你就是那只鬼了,所以被你碰到以后,就轮到我变成鬼了{{{
#include<bits/stdc++.h>
using namespace std;typedef long long ll;
template<typename T>inline void read(T &x)
{
x=0;char c=getchar(),f=0;
for(;c<48||c>57;c=getchar()) if(!(c^45)) f=1;
for(;c>=48&&c<=57;c=getchar()) x=(x<<1)+(x<<3)+(c^48);
f?x=-x:x;
}
template<typename T,typename...L>inline void read(T &x,L&...l) {read(x),read(l...);}//}}}
int n,m;ll a[1005][1005],s1[1005],s2[1005],K,p,rs=-1e18;
priority_queue<int>q1,q2;ll v1[1000005],v2[1000005];
int main()
{
read(n,m,K,p);for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) read(a[i][j]);
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) s1[i]+=a[i][j],s2[j]+=a[i][j];
for(int i=1;i<=n;i++) q1.push(s1[i]);
for(int i=1,v;i<=K;i++) v1[i]=v1[i-1]+(v=q1.top()),q1.pop(),q1.push(v-p*m);
for(int i=1;i<=m;i++) q2.push(s2[i]);
for(int i=1,v;i<=K;i++) v2[i]=v2[i-1]+(v=q2.top()),q2.pop(),q2.push(v-p*n);
for(int i=0;i<=K;i++) rs=max(rs,v1[i]+v2[K-i]-p*i*(K-i));
return printf("%lld\n",rs),0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件