zoukankan      html  css  js  c++  java
  • D. DZY Loves Modification

    D. DZY Loves Modification
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    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:

    1. 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.
    2. 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 test(s)
    input
    2 2 2 2
    1 3
    2 4
    
    output
    11
    
    input
    2 2 5 2
    1 3
    2 4
    
    output
    11
    
    Note

    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
    

    文章大意是给你一个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
    ",sum);
        }
        return 0;
    }
    


  • 相关阅读:
    【线型DP】【LCS】洛谷P4303 [AHOI2006]基因匹配
    【状压DP】SCOI2005-洛谷P1896-互不侵犯 (状压例题)
    【01背包】百度之星--度度熊剪纸条
    【线型DP】CF1012C Hills 小山坡
    【经典DP】洛谷P2285 [HZOI]2004 打鼹鼠
    【盗版动归】Codeforces998C——Convert to Ones 归一操作
    MySQL使用笔记(1)
    大学物理——光的干涉和衍射(2)
    大学物理——光的干涉和衍射(1)
    hdu5747 Aaronson 贪心
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4049123.html
Copyright © 2011-2022 走看看