濟南學習 Day 3 T3 am

2022-02-11 19:40:12 字數 1708 閱讀 5791

選數字 (select)

time limit:3000ms memory limit:64mb

題目描述

lyk 找到了乙個 n*m 的矩陣,這個矩陣上都填有一些數字,對於第 i 行第 j 列的位置上

的數為 ai,j。

由於它 ak 了 noip2016 的初賽,最近顯得非常無聊,便想到了乙個方法自娛自樂一番。

它想到的遊戲是這樣的: 每次選擇一行或者一列, 它得到的快樂值將會是這一行或者一列的

數字之和。之後它將該行或者該列上的數字都減去 p(之後可能變成負數) 。如此,重複 k

次,它得到的快樂值之和將會是它 noip2016 複賽比賽時的 rp 值。

lyk 當然想讓它的 rp 值盡可能高,於是它來求助於你。

輸入格式(select.in)

第一行 4 個數 n,m,k,p。

接下來 n 行 m 列,表示 ai,j。

輸出格式(select.out)

輸出一行表示最大 rp 值。

輸入樣例

2 2 5 2

1 32 4

輸出樣例

11資料範圍

總共 10 組資料。

對於第 1,2 組資料 n,m,k<=5。

對於第 3 組資料 k=1。

對於第 4 組資料 p=0。

對於第 5,6 組資料 n=1,m,k<=1000。

對於第 7,8 組資料 n=1,m<=1000,k<=1000000。

對於所有資料 1<=n,m<=1000,k<=1000000,1<=ai,j<=1000,0<=p<=100。

樣例解釋

第一次選擇第二列,第二次選擇第二行,第三次選擇第一行,第四次選擇第二行,第五

次選擇第一行,快樂值為 7+4+2+0+-2=11。

1 #include2 #include3 #include4 #include5

using

namespace

std;

6#define inf 100000000000000ll

7#define ll long long

8#define r register

9 priority_queueq1,q2;

10 ll xx[1000100],yy[1000100],x[1100],y[1100

];11

ll n,m,k,p,ans;

12void

anwser()

1324

for(int j=1;j<=m;j++)

25q2.push(y[j]);

26for(ll i=1;i<=k;i++)

2733 ans=-inf;

34for(int i=1;i<=k;i++)

35 ans=max(ans,xx[i]+yy[k-i]-p*(k-i)*i);

3637}38

intmain()

3950}51

anwser();

5253 printf("%d"

,ans);

5455

return0;

56 }

思路:首先我們可以得知如果你選擇了i行,則你一定選擇了k-i列,我們對每一行每一列都處理出乙個字首和,然後只要是這i行和這(k-i)列,答案一定最優,和選取順序無關

那麼,再開兩個陣列,用堆維護一下就可以了

濟南學習 Day 5 T3 am

題目描述 眾所不知,rly現在不會玩西洋棋。但是,作為乙個oier,rly當然做過八皇后問題.在這裡再囉嗦幾句,皇后可以攻擊到同行同列同對角線,在 n n的棋盤中,擺放n個皇后使它們互相不能攻擊到,求不同的解的數量,這就是經典的n皇后問題。現在問題推廣n皇后問題,這個問題對你而言實 在是小菜一碟。但...

濟南學習 Day 3 T2 am

看程式寫結果 program time limit 1000ms memory limit 64mb 題目描述 lyk 最近在準備 noip2017 的初賽,它最不擅長的就是看程式寫結果了,因此它拼命地 在練習。這次它拿到這樣的乙個程式 pascal readln n for i 1 to n do...

濟南學習 Day 3 T1 am

np np time limit 1000ms memory limit 64mb 題目描述 lyk 喜歡研究一些比較困難的問題,比如 np 問題。這次它又遇到乙個棘手的 np 問題。問題是這個樣子的 有兩個數 n 和 p,求 n 的階乘 對 p 取模後的結果。lyk 覺得所有 np 問題都是沒有多...