選數字 (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,但是如果左...