Codeforces Round #FF (Div. 2) D. DZY Loves Modification 优先队列
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<cmath> #include<string> #include<queue> #include<algorithm> #include<stack> #include<cstring> #include<vector> #include<list> #include<bitset> #include<set> #include<map> #include<time.h> using namespace std; #define LL long long #define bug(x) cout<<"bug"<<x<<endl; const int N=1e3+10,M=1e6+10,inf=1e9+10; const LL INF=1e18+10,mod=1e9+7; const double eps=(1e-8),pi=(4*atan(1.0)); LL a[N][N]; priority_queue<LL>col,row; LL r[M],c[M]; int main() { int n,m,k,p; scanf("%d%d%d%d",&n,&m,&k,&p); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%lld",&a[i][j]); for(int i=1;i<=n;i++) { int r=0; for(int j=1;j<=m;j++) r+=a[i][j]; row.push(r); } for(int j=1;j<=m;j++) { int c=0; for(int i=1;i<=n;i++) c+=a[i][j]; col.push(c); } for(int i=1;i<=k;i++) { LL x=row.top(); row.pop(); r[i]=r[i-1]+x; x-=m*p; row.push(x); } for(int i=1;i<=k;i++) { LL x=col.top(); col.pop(); c[i]=c[i-1]+x; x-=n*p; col.push(x); } LL ans=-INF; for(int i=0;i<=k;i++) ans=max(ans,r[i]+c[k-i]-1LL*p*i*(k-i)); printf("%lld\n",ans); return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步