COJ 0501 取數遊戲(TPM)

2022-05-23 02:57:20 字數 3329 閱讀 9048

取數遊戲(tpm)

難度級別:d; 執行時間限制:1000ms; 執行空間限制:51200kb; **長度限制:2000000b

試題描述

給你乙個n*n的格仔的棋盤,每個格仔裡面有乙個非負數。從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能有公共邊,並且取出的數的和最大。(二分圖匹配練習)

輸入第一行是乙個正整數n (n<20)。

接下來是 n*n 個非負數。

輸出

輸出可能取得的最大的和。

輸入示例

35 9 4

8 3 6

2 7 1

輸出示例

30其他說明

n<20

題解:「沒有公共邊」這是赤裸裸的二分圖呀!隨便按(i+j)&1造個二分圖跑了就行。。。

而且,這是我第乙個接觸的構造題吧= = 還是非常有紀念意義的= =我記得當年還是小健建給我親自敲了一遍dinic然後敲了一遍這道題。。。回憶滿滿呢~

現在老練的isap+縮行:

1

//這兩道題有什麼區別。。。= =

2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9const

int maxn=2002+10,maxm=80002+10,inf=-1u>>1;10

struct

isapadj[maxm];int

ms,fch[maxn];

12int

d[maxn],s[maxn],cur[maxn],gap[maxn],n,top;

13void init(int

n)19

void addedge(int u,int v,int

w);fch[u]=ms++;

21 adj[ms]=(tedge);fch[v]=ms++;

22return;23

}24void

bfs()

32 } return;33

}34int maxflow(int s,int

t)44

for(i=cur[k];i!=-1;i=adj[i].next)47}

48if(i==-1

) if(--gap[d[k]]==0) break

;54 d[k]=lim+1;gap[d[k]]++;

55if(k!=s) k=adj[s[--top]].x;56}

57 } return

flow;58}

59}sol;

60 inline int

read()

63while(isdigit(ch)) x=10*x+ch-'

0',ch=getchar();

64return x*=sig;65}

66 inline void write(int

x)if(x<0) putchar('

-'),x=-x;

68int len=0,buf[15];while(x) buf[len++]=x%10,x/=10;69

for(int i=len-1;i>=0;i--) putchar(buf[i]+'

0');return;70

}71int a[21][21],mx=,my=;

72void

init()84}

85else sol.addedge(i*n+j-n,t,a[i][j]);

86 ans+=a[i][j];

87}

88 write(ans-sol.maxflow(s,t));

89return;90

}91void

work()

94void

print()

97int

main()

當時最稚嫩的**。。。真的有種說不出的感動:

1 #include 2 #include 3

using

namespace

std;45

const

int maxn = 400 + 10;6

const

int maxm = 10000 + 10;7

8struct

edge9;

1213

struct

dinic

1429

30void addedge(int

from, int to, int

cap)31;

33 next[m] = first[from

];34 first[from] = m++;

3536 edges[m] = (edge);

37 next[m] =first[to];

38 first[to] = m++;

3940

return;41

}4243int

d[maxn], cur[maxn];

44bool

vis[maxn];

4546

intbfs()

4770}71

}7273return

vis[t];74}

75int dfs(int x, int

a)7692}

93return

flow;94}

9596

97int maxflow(int s, int

t)98

109return flow; //

你大爺!!!!!!!!!!!!!!!!

110}

111}sol;

112113

int a[21][21

];114

int nx = ;

115int ny = ;

116117

intmain()

118150

}151

}152

else sol.addedge(i * m +j, t, a[i][j]);

153}

154155 printf("

%d\n

", tot - sol.maxflow(s, t)); 156

157//

system("pause");

158return0;

159 }

搜尋複製

1308 取數遊戲

description alice想讓bob陪他去看 唐山大 但由於bob是個很感性的人,怕流淚不想去,但又不好意思以這個作為拒絕的理由,便提出玩乙個遊戲。n個正整數圍成一圈,規則如下 兩個玩家輪流取數 最開始先手的玩家可以取任意乙個數x 從第二步開始當前玩家只能取x 上一玩家剛剛取的數 左右兩邊相...

矩陣取數遊戲

帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n m的矩陣,矩陣中的每個元素a 均為非負整數。遊戲規則如下 每次取數時須從每行各取走乙個元素,共n個。經過m次後取完矩陣內所有元素 每次取走的各個元素只能是該元素所在行的行首或行尾 每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分 被取走...

1574 矩陣取數遊戲

1574 矩陣取數遊戲 時間限制 1000 ms 記憶體限制 524288 kb 提交數 618 通過數 248 題目描述 經常和同學玩乙個矩陣取數遊戲 對於給定的 n m 的矩陣,矩陣中每個元素 aij 均為非負整數。遊戲規則如下 1 每次取數時必須從每行各取走乙個元素,共 n 個,m 次取完所有...