【NOIP】普及组2010 三国游戏

【算法】贪心

【题解】如果看重一对,先选择其中一个点,该点相邻最大的肯定被选走。所以答案就是最大的[所有点的次大连边点]啦。

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cctype>
#include<cstring>
using namespace std;
const int maxn=510;
int a[maxn][maxn],n,max1,max2,ans;
int main()
{
//    freopen("sanguo.in","r",stdin);
//    freopen("sanguo.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
     {
         for(int j=i+1;j<=n;j++)
          scanf("%d",&a[i][j]),a[j][i]=a[i][j];
     }
/*    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)printf("%d ",a[i][j]);
        printf("\n");
    }*/
    ans=0;
    for(int i=1;i<=n;i++)
     {
         max1=0;max2=0;
         for(int j=1;j<=n;j++)
         if(a[i][j]>max1)max2=max1,max1=a[i][j];
          else if(a[i][j]>max2)max2=a[i][j];
//        printf("i=%d max=%d max2=%d\n",i,max1,max2);
        if(max2>ans)ans=max2;
     }
    printf("1\n%d",ans);
    return 0;
}
View Code

 

posted @ 2016-08-12 21:27  ONION_CYC  阅读(236)  评论(0编辑  收藏  举报