列舉 矩陣消除 七段數碼管

2021-10-25 03:22:52 字數 1899 閱讀 7222

目錄

矩陣消除:

題目:思路:

**:七段數碼管(藍橋杯題目)

大致題意:

思路:**:

牛妹在玩乙個名為矩陣消除的遊戲,矩陣的大小是行列,第行第列的單元格的權值為,

牛妹可以進行個回合的遊戲,在每個回合,牛妹可以選擇一行或者選擇一列,

然後將這一行或者這一列的所有單元格中的權值變為,同時牛妹的分數會加上這一行或者這一列中的所有單元格的權值的和。

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

輸入描述:

第一行三個整數

接下來行每行個整數表示矩陣中各個單元格的權值。

輸出描述:

輸出乙個整數表示牛妹能獲得的最大分數。

1<=n,m<=15 1<=k<=n*m

;剛開始想著記錄每行每列的數,排序,選擇,重排。顯然,會造成相等情況下不同選擇會有不同的結果。這個思路可以pass掉了。

資料範圍較小的時候,用二進位制列舉:利用二進位制列舉每一種狀態。比如010101,就是選擇1 3 5不選擇2 4 6。在這裡列舉那幾行,然後重新排列再選擇最高的幾列(選擇列的時候不會改變其它列的和)。

枚舉行數比k大或者列舉的行數+所有列數都達不到k,就沒有必要再算下去,直接continue;

k的值是≤n*m,需要縮小k的範圍,賦值k,n,m的最小的那一樣數(如果n,m小,k直接全部選擇即可)

#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn = 1e6+50;

ll _map[20][20];

int main();

for(int i = 1;i <= n;i++)

k=min(k,n);k=min(k,m);

int sta = (1<>j)&1))

}if(cnt_c+m < k||cnt_c > k)    continue;/*k<=n*m  過大的話可能導致cnt_c+m= 1;j--)               

七條邊,不能全滅,有的亮有的滅或者全亮。所有亮的並且連通的種類數。

並查集+dfs,我感覺比較複雜,不如列舉每一種情況(畢竟只有7個管),然後判斷是否

連通(可以利用flody,離散中的沃舍爾演算法)。

#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int inf = 0x3f3f3f3f;

const int maxn = 1e6+50;

int dis[10][10];

int a[10];

int tot;

void ini()

void floyd()

bool check(int sta)

floyd();

for(int i = 0;i < tot;i++)

for(int j = 0;j < tot;j++)

if(dis[a[i]][a[j]] == inf) return false;

return true;

}int main()

cout<

return 0;

}

繪製七段數碼管

seven digits draw v1.0 第一,繪製線 第二,繪製七段數碼管組成的數字 第三,繪製優化數碼管間距 第四,繪製多組數字 第五,獲取系統時間 第六,主函式執行程式。如下 import turtle as t import time def drawline draw drawgap ...

七段數碼管繪製

步驟1 繪製單個數字對應的數碼管 步驟2 獲得一串數字,繪製對應的數碼管 步驟2 獲得當前系統時間,繪製對應的數碼管 步驟1 繪製單個數字對應的數碼管 基本問題是繪製一條線,可將其定義為乙個基本函式 def drawline draw turtle.pendown if draw else turt...

Python 七段數碼管

缺點 七段數碼管間無間隔不美觀,沒有 年 月 日 字樣不直觀,不能表示系統時間需手動輸入 import turtle defdrawline draw 繪製單段數碼管 turtle.pendown if draw else turtle.penup turtle.fd 40 turtle.right...