Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列_html/css_WEB-ITnose

WBOY
Freigeben: 2016-06-24 12:01:56
Original
1296 Leute haben es durchsucht

链接: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 maxntypedef long long ll;using namespace std;long long INF =(1LL  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 j="0;" scanf col row r.push c.push cn y="c.top();" c.pop rn r.pop long ans="-INF;" printf return>  <br>  <br>  <p></p>  <p><br> <br> </p> </n></string></algorithm></cstdlib></ctype.h></vector></stack></queue></map></cmath></cstring></cstdio></iostream>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage