日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【每日一题】8月11日题目精讲—矩阵消除游戏

發布時間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【每日一题】8月11日题目精讲—矩阵消除游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:牛客網:

時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 262144K,其他語言524288K 64bit IO Format: %lld

題目描述

牛妹在玩一個名為矩陣消除的游戲,矩陣的大小是n行m列,第i行第j列的單元格的權值為ai,j,牛妹可以進行k個回合的游戲,在每個回合,牛妹可以選擇一行或者選擇一列,然后將這一行或者這一列的所有單元格中的權值變為0,同時牛妹的分數會加上這一行或者這一列中的所有單元格的權值的和。

牛妹想最大化她的得分,球球你幫幫她吧!

輸入描述:
第一行三個整數n,m,k
接下來n行每行m個整數表示矩陣中各個單元格的權值。
輸出描述:
輸出一個整數表示牛妹能獲得的最大分數。
示例1
輸入
復制

3 3 2 101 1 102 1 202 1 100 8 100

輸出
復制

414

備注:

題解:

我來總結下官方題解:
如果我們考慮一行一行或一列一列的選擇則可以貪心。但實際上不行,所以我們要把問題轉化成選若干列
再看看范圍1<n,m<15,這不是等著我們去暴力嗎?
如果我們給出每一列,那每一列的狀態就是固定的
我們可以用01串來表示狀態,比如01001表示134行不選,第25行選擇,這樣我們直接枚舉0到2n-1就代表枚舉了00…00到11…11
大致過程:
T從0~2n-1枚舉,表示行的狀態
T是一個十進制數,我們轉發成二進制,看里面幾個1(numh),哪些位置是1,進行記錄。
T中幾個1說明選幾行,numl=k-numh(T中1的個數)為選幾列
sum先加上要選的那幾行(T中1的位置)
然后刨去那幾行的數據,我們對剩下的數據按照每列的和進行排序,選擇最高的那numl列
維護答案即可
整個過程實則為二進制轉換+貪心

代碼:

我對官方代碼進行了更詳細的解讀

#include<bits/stdc++.h> using namespace std; int n, m ,k; int a[20][20]; long long sh[20],sl[20];//sh[i]是第i行的和,sl[i]是第i列的和(在行選完之后用) bool b[20];//b[i]是01串轉換過來的bool數組(用bool數組主要是為了方便大家理解) long long ans = 0; //存答案,注意總和會超過int的最大值要用long long int deal(int x) //把x這個數字轉換成bool數組 {memset(b, 0, sizeof(b)); //不清數組會死!int cnt = 0, i = 1; //cnt存01串里面1的個數while (x){if (x&1) //如果x的最后一位是1{cnt++;//記錄其中1的數量 b[i] =1;//說明第i行是被選擇的 }x>>=1; //x右移一位,等價于除以二取整i++;//到下一行 }return cnt; } int main() { //————————————讀入——————————————scanf("%d%d%d", &n, &m, &k);for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++){scanf("%d", &a[i][j]);sh[i] += a[i][j];//記錄每一行的值 } //————————以上讀入不多說————————//——如果k>n或者k>M,那么肯定就把矩陣選完了———— //這里我這么處理主要是因為我后面的有個判斷把這種情況給直接continue掉了, //debug的時候不想的再寫別的了就這樣了 //k=n或者m就已經能把矩陣選完,所以結果肯定是一樣的if (k > n) k = n;if (k > m) k = m; //————————————————————————————————————————//—————枚舉選行的所有可能性,貪心處理列——————int tmp = (1<<n) -1; //1<<n就等于2^n,位運算不會的同學百度一下for (int T =0; T <= tmp; T++) //T用來枚舉行的狀態{int numh = deal(T);//將狀態T轉為bool數組,并返回有多少個1,既要選多少行int numl = k-numh; //numl是要選多少列if (numl > m || numl < 0) continue;//numl>m或者numl<0,說明行的方案不對(其實也有可能是k太大,這里就是上文說的k比較大的時候直接continue沒了的地方)。long long sum=0; //sum是本次枚舉的方案的和for (int i = 1; i <= n; i++) if (b[i]) sum += sh[i]; //把選中的行都加上memset(sl, 0, sizeof(sl));//行選得不同矩陣就不同,所以sl數組每次都要清干凈for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)if (!b[i]) sl[j] += a[i][j]; //第i行沒有選,j列的和需要加上a[i][j](第i行選了a[i][j]就清零了不能加)sort(sl+1, sl+1+m);//對每一列的和進行排序(刨去指定行) for (int i=1,j=m; i<=numl; i++,j--) sum += sl[j]; //把最大的numl列的和加到方案里ans = max(ans, sum);//維護答案} //————————————枚舉+貪心結束——————————————printf("%lld\n", ans);return 0;}

總結

以上是生活随笔為你收集整理的【每日一题】8月11日题目精讲—矩阵消除游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久国产精品夜夜夜夜夜 | 午夜精品区| 性做久久久久久免费观看欧美 | www.x日本| 中国亚洲女人69内射少妇 | 天天艹天天射 | 中文字幕a级片 | 亚洲免费在线观看av | 色老久久 | 亚洲制服一区二区 | www日韩视频 | 国产亚洲网站 | 日本亚洲最大的色成网站www | 中文字幕日韩三级 | 国产精品主播在线 | 精品黑人一区二区三区在线观看 | 日日夜夜影院 | 成人激情站 | 国产aⅴ精品 | 精产国品一二三区 | 天天透天天操 | 精品久久久久久亚洲 | 在线亚洲精品 | 特级西西人体444www高清大胆 | 日韩欧美一级大片 | 欧美精品激情 | 国产国语videosex另类 | 99久久精品无码一区二区毛片 | 国产精品久久无码一三区 | 成人av免费在线观看 | 国产免费又黄又爽又色毛 | 国产日产精品一区二区三区四区 | 国模婷婷 | 久久一区二区三区视频 | 色婷婷久久五月综合成人 | 日韩一区免费 | 99久久人妻无码中文字幕系列 | 日日天天干 | 女人18毛片一区二区三区 | 欧美一级一级 | www.日批| 久久成人精品 | 亚洲一级电影 | 蜜臀一区| 亚洲日批 | 国产女优在线播放 | 精品国产91久久久久久久妲己 | 日韩高清在线一区二区 | 美女福利在线视频 | 精品免费久久久 | av草逼| 麻豆传媒在线视频 | 色网址在线观看 | 夜夜摸夜夜爽 | 在线免费观看小视频 | 国产亚洲精品久久久久四川人 | 91美女在线视频 | 中日韩一级片 | 精品一区欧美 | 日本 欧美 国产 | 日韩在线播放视频 | 日本一区二区在线 | 精品久久久蜜桃 | 久久精品一区 | 九九九亚洲 | 尤果网福利视频在线观看 | 韩日av片 | 嫩草伊人久久精品少妇av | 国产欧美精品在线 | 狠狠天天 | 潘金莲三级野外 | 小箩莉末发育娇小性色xxxx | 亚洲欲色 | 永久av在线 | 主播一区二区 | 激情成人av| 色综合久久天天综合网 | 好吊操av | 欧美特级黄 | 免费日b视频| 少妇人妻在线视频 | 视频福利在线观看 | 美女脱了裤子让男人桶 | www.一级片 | 欧美少妇毛茸茸 | 亚洲a视频| a视频免费 | 中文在线永久免费观看 | 国产三级小视频 | 色男人天堂av | 亚洲AV无码久久精品色三人行 | 国产伦精品一区二区三区照片 | 色图18p | av最新天| 麻豆av影院 | 牲欲强的熟妇农村老妇女视频 | 韩国伦理片免费看 | 国产aaaaaaa| www.日韩高清|