XTU 二分圖和網路流 練習題 C. 方格取數(1)

來源:互聯網
上載者:User

標籤:style   blog   http   java   color   os   io   for   

C. 方格取數(1)Time Limit: 5000msMemory Limit: 32768KB64-bit integer IO format: %I64d      Java class name: Main 給你一個n*n的格子的棋盤,每個格子裡面有一個非負數。
從中取出若干個數,使得任意的兩個數所在的格子沒有公用邊,就是說所取的數所在的2個格子不能相鄰,並且取出的數的和最大。 Input包括多個測試執行個體,每個測試執行個體包括一個整數n 和n*n個非負數(n<=20) Output對於每個測試執行個體,輸出可能取得的最大的和 Sample Input
375 15 21 75 15 28 34 70 5 
Sample Output
188

解題:有人用狀態壓縮dp做啊,我只能對著別人的代碼敲了。。。。。


 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <climits> 7 #include <vector> 8 #include <queue> 9 #include <cstdlib>10 #include <string>11 #include <set>12 #define LL long long13 #define INF 0x3f3f3f3f14 using namespace std;15 const int maxn = 510;16 int mp[maxn*maxn],tot,n,src,sink;17 int c[maxn][maxn];18 bool vis[maxn];19 int dfs(int u,int low){20     if(u == sink) return low;21     if(vis[u]) return 0;22     vis[u] = true;23     for(int v = 0,flow; v <= sink; v++){24         if(c[u][v] && (flow = dfs(v,min(low,c[u][v])))){25             c[u][v] -= flow;26             c[v][u] += flow;27             return flow;28         }29     }30     return 0;31 }32 int maxFlow(){33     int ans = 0,flow;34     memset(vis,false,sizeof(vis));35     while(flow = dfs(src,INF)){36         memset(vis,false,sizeof(vis));37         ans += flow;38     }39     return ans;40 }41 int main(){42     int i,j,temp;43     while(~scanf("%d",&n)){44         j = n*n;45         src = tot = 0;46         sink = j+1;47         memset(mp,0,sizeof(mp));48         memset(c,0,sizeof(c));49         for(i = 1; i <= j; i++){50             scanf("%d",&temp);51             tot += temp;52             if(i <= n) mp[i] = !mp[i-1];53             else mp[i] = !mp[i-n];54             if(mp[i]){55                 if(i%n) c[i][i+1] = INF;//右邊56                 if(i%n != 1) c[i][i-1] = INF;//左邊57                 if(i <= n*(n-1)) c[i][n+i] = INF;//下邊58                 if(i > n) c[i][i-n] = INF;//上邊59                 c[src][i] = temp;60             }else c[i][sink] = temp;61         }62         printf("%d\n",tot-maxFlow());63     }64     return 0;65 }
View Code

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.