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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HD1281棋盘游戏(匹配+好题)

發布時間:2024/4/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HD1281棋盘游戏(匹配+好题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

棋盤游戲

Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3372????Accepted Submission(s): 1997


Problem Description 小希和Gardon在玩一個游戲:對一個N*M的棋盤,在格子里放盡量多的一些國際象棋里面的“車”,并且使得他們不能互相攻擊,這當然很簡單,但是Gardon限制了只有某些格子才可以放,小希還是很輕松的解決了這個問題(見下圖)注意不能放車的地方不影響車的互相攻擊。
所以現在Gardon想讓小希來解決一個更難的問題,在保證盡量多的“車”的前提下,棋盤里有些格子是可以避開的,也就是說,不在這些格子上放車,也可以保證盡量多的“車”被放下。但是某些格子若不放子,就無法保證放盡量多的“車”,這樣的格子被稱做重要點。Gardon想讓小希算出有多少個這樣的重要點,你能解決這個問題么?

?

Input 輸入包含多組數據,
第一行有三個數N、M、K(1<N,M<=100 1<K<=N*M),表示了棋盤的高、寬,以及可以放“車”的格子數目。接下來的K行描述了所有格子的信息:每行兩個數X和Y,表示了這個格子在棋盤中的位置。

?

Output 對輸入的每組數據,按照如下格式輸出:
Board T have C important blanks for L chessmen.

?

Sample Input 3 3 4 1 2 1 3 2 1 2 2 3 3 4 1 2 1 3 2 1 3 2

?

Sample Output Board 1 have 0 important blanks for 2 chessmen. Board 2 have 3 important blanks for 3 chessmen.

?

Author Gardon

?

Source 杭電ACM集訓隊訓練賽(VI) 題意:如果某點不放棋子就不能達到最大的車;問這個點數的最大值 把車當成連接x,y的一條邊,求最多能放車的數量就是求最大匹配,即x,y的匹配 求不重要的點就暴力枚舉每一個點,假設沒有這個點看看匹配數是否變小,這個做法很好 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 const int MAX = 110; 7 int g[MAX][MAX],vis[MAX],link[MAX]; 8 int n,m,k; 9 int findx(int x) 10 { 11 for(int i = 1; i <= m; i++) //注意這是m 12 { 13 if(g[x][i] == 1 && vis[i] == 0) 14 { 15 vis[i] = 1; 16 if(link[i] == 0 || findx(link[i])) 17 { 18 link[i] = x; 19 return true; 20 } 21 } 22 } 23 return false; 24 } 25 int getsum() 26 { 27 int sum = 0; 28 memset(link,0,sizeof(link)); 29 for(int i = 1; i <= n; i++) 30 { 31 memset(vis,0,sizeof(vis)); 32 if(findx(i)) 33 sum++; 34 } 35 return sum; 36 } 37 int main() 38 { 39 int t = 0; 40 while(scanf("%d%d%d", &n,&m,&k) != EOF) 41 { 42 int x,y,sum = 0,important = 0; 43 memset(g,0,sizeof(g)); //初始化 44 for(int i = 0; i < k; i++) 45 { 46 scanf("%d%d",&x,&y); 47 g[x][y] = 1; 48 } 49 sum = getsum(); 50 51 for(int i = 1; i <= n; i++) 52 { 53 for(int j = 1; j <= m; j++) 54 { 55 if(g[i][j]) 56 { 57 g[i][j] = 0; 58 if(sum > getsum()) 59 important++; 60 g[i][j] = 1; 61 } 62 } 63 } 64 printf("Board %d have %d important blanks for %d chessmen.\n",++t,important,sum); 65 } 66 return 0; 67 } View Code

?

轉載于:https://www.cnblogs.com/zhaopAC/p/5005293.html

總結

以上是生活随笔為你收集整理的HD1281棋盘游戏(匹配+好题)的全部內容,希望文章能夠幫你解決所遇到的問題。

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