選數字(貪心 列舉)

2022-05-14 18:30:06 字數 1965 閱讀 9368

選數字 (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到k次橫行和列航的最大值

然後列舉每種情況取最優值

來,上**:

#include#include

#include

#include

#define big 1000000000000000

using

namespace

std;

long

long

int n,m,k,p,cur,s1[1002],s2[1002

],jkl;

long

long

int num1=0,num2=0,sumh[1000002],suml[1000002

];long

long

intans;

char

ch;priority_queue

long

int>ha;

priority_queue

long

int>li;

void qread(long

long

int &x)

while(ch<='

9'&&ch>='0')

x*=jkl;

}int

main()

}if(p==0

)

for(long

long

int i=1;i<=n;i++) ha.push(s1[i]);

for(long

long

int j=1;j<=m;j++) li.push(s2[j]);

for(long

long

int i=1;i<=k;i++)

for(long

long

int i=0;i<=k;i++)

cout

return0;

}

選數字(貪心)

題目描述 lyk 找到了乙個 n m 的矩陣,這個矩陣上都填有一些數字,對於第 i 行第 j 列的位置上的數為 ai,j。由於它 ak 了 noip2016 的初賽,最近顯得非常無聊,便想到了乙個方法自娛自樂一番。它想到的遊戲是這樣的 每次選擇一行或者一列,它得到的快樂值將會是這一行或者一列的數字之...

貪心題目選講

假定海岸線是一條無限延伸的直線,陸地在海岸線的一邊,大海在另一側。海中有許多島嶼,每乙個小島我們可以認為是乙個點。現在要在海岸線上安裝雷達,雷達的覆蓋範圍是d,也就是說大海中乙個小島能被安裝的雷達覆蓋,那麼它們之間的距離最大為d。我們使用平面直角座標系,定義海岸線是x軸,大海在x軸上方,陸地在下方。...

貪心 思維 列舉

題目大意 左括號和右括號數量相等的個數 思路 從開始列舉,用兩個標記指標,乙個記錄左括號和右括號的數量,出現乙個左括號 出現乙個右括號 出現乙個?號的話我們先把它當成右括號 所以 左括號 但是問號也要記錄下來 所以問號 當 左括號的數量為零的時候說明左括號和右括號的數量相等,所以答案加1,但是如果左...