zoukankan      html  css  js  c++  java
  • Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列

    链接:http://codeforces.com/problemset/problem/447/D

    题意:一个n*m的矩阵。能够进行k次操作,每次操作室对某一行或某一列的的数都减p,获得的得分是这一行或列原来的数字之和。求N次操作之后得到的最高得分是多少。

    思路:首先分别统计每行和每列的数字和。

    进行的k次操作中,有i次操作是对行进行操作,剩余k-i次操作是对列进行操作。

    首先在操作中忽略每次操作中行对列的影响,然后计算列的时候,最后能够计算出,总共的影响是i*(k-i)*p。

    找出对于每一个i次操作选取最高价值来计算出得到的最高分。记录为cn[i],rn[i](用优先队列取首)。

    对于不同的i取ans=max(cn[i]+rn[k-i]-i*(k-i)*p)。

    注意点是数据会超int,ans初始值要取得极小。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<map>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<ctype.h>
    #include<cstdlib>
    #include<algorithm>
    #include<string>
    #define PI acos(-1.0)
    #define maxn
    typedef long long ll;
    using namespace std;
    long long INF =(1LL << 60);
    priority_queue < long long > c,r;
    int main()
    {
        int n,m,k,p,x;
        long long y;
        scanf("%d%d%d%d",&n,&m,&k,&p);
        int col[1005],row[1005];
        long long cn[1000005],rn[1000005];
        for(int i=0; i<n; i++)
            for(int j=0; j<m; j++)
            {
                scanf("%d",&x);
                col[j]+=x;
                row[i]+=x;
            }
        for(int i=0; i<n; i++)
            r.push(row[i]);
        for(int i=0; i<m; i++)
            c.push(col[i]);
        cn[0]=rn[0]=0;
        for(int i=1; i<=k; i++)
        {
            y=c.top();
            cn[i]=cn[i-1]+y;
            c.pop();
            c.push(y-n*1LL*p);
            y=r.top();
            rn[i]=rn[i-1]+y;
            r.pop();
            r.push(y-m*1LL*p);
        }
        long long ans=-INF;
        for(int i=0; i<=k; i++)
            ans=max(ans,cn[i]+rn[k-i]-i*1LL*(k-i)*p);
        printf("%I64d
    ",ans);
        return 0;
    }
    




  • 相关阅读:
    课时15.DTD文档声明下(了解)
    Python-01 学习第一节
    常用数据库备份还原命令
    Oracle排除记录集
    存储过程分页语句
    TFS统计编码行数语句
    数据库所有表替换所有列的特定字符串
    MSSQL查询所有数据库表,指定数据库的字段、索引
    统计整个库所有表的记录数
    执​行​o​r​a​c​l​e​函​数​的​四​种​方​法
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6889075.html
Copyright © 2011-2022 走看看