題意:
牛妹在玩乙個名為矩陣消除的遊戲,矩陣的大小是n行m列,第i行第j列的單元格的權值為ai,
j,
a_,ai
,j,
,牛妹可以進行k個回合的遊戲,在每個回合,牛妹可以選擇一行或者選擇一列,然後將這一行或者這一列的所有單元格中的權值變為0,同時牛妹的分數會加上這一行或者這一列中的所有單元格的權值的和。
牛妹想最大化她的得分,球球你幫幫她吧!
題解:
如果這個題想直接暴力對所有行和列進行dfs的話,這樣應該是會超時的,試了好幾種方法,都t了,很遺憾。
這題無論是dfs或者是二進位制列舉,核心都是,枚舉行或者列舉列,再去貪心,也就是說,如果你列舉的是行,那麼你就去貪心列,如果你列舉的是列,那你就去貪心行。
假設我們列舉的是列,那麼我們求所列舉的列時,順帶將去除所列舉的列後,每行的值都存在乙個陣列裡,然後對陣列進行排序。如果挑選次數還有剩餘,有限挑選大的。
**:
/*keep on going never give up*/
#pragma gcc optimize(3,"ofast","inline")
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define int long long
using
namespace std;
const
int maxn =
110;
const
int maxn =
0x3f3f3f3f
;const
int minn =
0xc0c0c00c
;typedef
long
long ll;
const
int inf=
0x3f3f3f3f
;const ll mod=
1e9+7;
ll a[maxn]
[maxn]
;ll rem[maxn]
;signed
main()
}if(k>=
min(n,m)
) ans=0;
for(
int t=
0;t<(1
<;t++)}
sort
(rem+
1,rem+n+
1,greater<
int>()
);for(
int i=
1;i<=k-cnt;i++
) ans=
max(ans,temp)
;memset
(rem,0,
sizeof rem);}
cout
}
牛客練習賽58 C 矩陣消除遊戲
題目鏈結 牛妹在玩乙個名為矩陣消除的遊戲,矩陣的大小是n行m列,第i行第j列的單元格的權值為ai,ja ai,j 牛妹可以進行k個回合的遊戲,在每個回合,牛妹可以選擇一行或者選擇一列,然後將這一行或者這一列的所有單元格中的權值變為0,同時牛妹的分數會加上這一行或者這一列中的所有單元格的權值的和。牛妹...
牛客練習賽58 C 矩陣消除遊戲 貪心
給定乙個 n 行 m 列的矩陣,每個位置有權值 a 可以進行 k 次操作,每次任選一行或一列,將這行 列 的權值全部變為 0 得分加上這行 列 的權值和,求最大得分 考慮到 n,m 很小,暴力列舉消除哪些行,然後對列貪心 include using namespace std const int n...
牛客練習賽58
a 給你兩個序列ai,bia i,b i ai bi 然後讓你兩兩配對相加,使得最大值最小。貪心。乙個從大到小排,乙個從小到大排,直接相加。b給你乙個01字串,然後讓你找到最多的組,滿足每一組都有0和1。貪心。從前往後掃。遇到0和1是立馬累加,思路 一開始想得是每次挑出行和列中的最大值,然後累加,沒...