取數遊戲(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 3using
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 次取完所有...