題解node
這是一道貪心題c++
分析一下spa
每一個默契值關係到兩個武士code
小涵先選武士,爲了保證最大默契值blog
確定是會找到一個默契值最大的數字,選擇其中這兩個武士當中的一個遊戲
那麼不管是選哪個,下一個輪到機器選,必定會把另外一個武士選中,組織小涵勝利get
顯然最大默契值必定不會成爲本題答案it
考慮次大默契值class
咱們在考慮最大默契值的時候,小涵必定肯定了一個武士,若是次大默契值與最大默契值同行或者同列,那麼小涵下一步選擇它,就構成了最優答案,輸出便可sort
咱們繼續尋找下一個大的默契值
代碼
#include<bits/stdc++.h> using namespace std; int cnt,n,mp; bool vis[1000010]; struct node { int x; int y; int w; }jiang[1000010]; bool cmp(node x,node y) { return x.w >y.w ; } int main() { scanf("%d",&n); cnt=0; for(int i=1;i<=n-1;i++) for(int j=i+1;j<=n;j++) { scanf("%d",&mp); jiang[++cnt].w =mp; jiang[cnt].x =i; jiang[cnt].y =j; } sort(jiang+1,jiang+cnt+1,cmp); int flag=0; vis[jiang[1].x ]=1; vis[jiang[1].y ]=1; for(int i=2;i<=cnt;i++) { if(vis[jiang[i].x] ||vis[jiang[i].y ]) { printf("1\n"); printf("%d\n",jiang[i].w ); return 0; } else { if(!vis[jiang[i].x] ) vis[jiang[i].x]=1; if(!vis[jiang[i].y] ) vis[jiang[i].y]=1; } } printf("0\n"); return 0; }
一開始用模擬作的,敲了將近一百多行,發現能夠縮短成不到60行QWQ