題目鏈結
牛妹在玩乙個名為矩陣消除的遊戲,矩陣的大小是n行m列,第i行第j列的單元格的權值為ai,
ja_
ai,j
,牛妹可以進行k個回合的遊戲,在每個回合,牛妹可以選擇一行或者選擇一列,然後將這一行或者這一列的所有單元格中的權值變為0,同時牛妹的分數會加上這一行或者這一列中的所有單元格的權值的和。
牛妹想最大化她的得分,球球你幫幫她吧!
第一行三個整數n,m,k
接下來n行每行m個整數表示矩陣中各個單元格的權值。
輸出乙個整數表示牛妹能獲得的最大分數。
3 3 2
101 1 102
1 202 1
100 8 100
414
很多人一開始想暴力,但是實際上暴力是有問題的,比如***這個例子,假設n=m=3,k=2:
[ 13
2246
378]
\left[ \begin 1&3&2\\ 2&4&6\\ 3&7&8\\ \end \right]
⎣⎡123
347
268
⎦⎤
暴力的話第一次可選第一行或者第一列,但出於最優考慮,只能選第一行和第三行,此時暴力就無法判斷是否最優了,我們不妨換個角度:
1.列舉出所有列的選舉情況 2
m2^m
2m2.計算剩下的每行的權值和並排序
3.將所選行與所選列相加,更新答案
4.重複上述步驟,直至最優
ac**如下:
#include
using
namespace std;
typedef
long
long ll;
int a[20]
[20],n,m,k,sum[20]
;bool
cmp(
int a,
int b)
intcount1
(int n)
return ans;
}int
main()
int ans=0;
for(
int i=
0;i<
1<)sort
(sum,sum+n,cmp)
;for
(int j=
0;j) res+
=sum[j]
; ans=
max(ans,res);}
cout<}
牛客練習賽58 C 矩陣消除遊戲 貪心
給定乙個 n 行 m 列的矩陣,每個位置有權值 a 可以進行 k 次操作,每次任選一行或一列,將這行 列 的權值全部變為 0 得分加上這行 列 的權值和,求最大得分 考慮到 n,m 很小,暴力列舉消除哪些行,然後對列貪心 include using namespace std const int n...
矩陣消除遊戲 牛客練習賽58
題意 牛妹在玩乙個名為矩陣消除的遊戲,矩陣的大小是n行m列,第i行第j列的單元格的權值為ai,j,a ai j 牛妹可以進行k個回合的遊戲,在每個回合,牛妹可以選擇一行或者選擇一列,然後將這一行或者這一列的所有單元格中的權值變為0,同時牛妹的分數會加上這一行或者這一列中的所有單元格的權值的和。牛妹想...
牛客練習賽58
a 給你兩個序列ai,bia i,b i ai bi 然後讓你兩兩配對相加,使得最大值最小。貪心。乙個從大到小排,乙個從小到大排,直接相加。b給你乙個01字串,然後讓你找到最多的組,滿足每一組都有0和1。貪心。從前往後掃。遇到0和1是立馬累加,思路 一開始想得是每次挑出行和列中的最大值,然後累加,沒...