- 三国游戏
- 2015-05-13 11:22:39 @
从思想实现来说,还是一道枚举加贪心的题目。因为,“人”在和计算机斗争的过程中,双方都无法取得最大的默契配合值。所以,“人”只能够去考虑次大最优值,但是,为了能够骗过计算机,我们选择的,只能够是跟我们选择的第一位武将配合值次大的那位武将(如果不是一个的话也会被计算机破坏掉)。所以,就要求我们必须,找到,每行中次大值最大的那个值(挺扰人的)。当然,这个提法是建立在我们有了题目中展示的那个矩阵之后。你要注意,题目给你的值是这个矩阵的右半边,你需要把左半边的值自己不上,才能够按照行去枚举(当然,做完后,如果你想按照列,也没有关系,因为全都是对称的,对吧)。
当然,可能有同学考虑到了0的难问题。很遗憾,这道题肯定不会出现零。因为,计算机只能破坏“人”,而且,我也想到了骗他的方法,计算机必输无疑。
下面看一下程序的核心部分:
输入部分:
for (i = 1 ; i < n ; i++)
for (j = i + 1 ; j <= n ; j++ )
cin >> s[i][j];
对称复制部分:
for (i = 2 ; i <= n ; i++)
for (j = 1 ; j < i ; j++)
s[i][j] = s[j][i];
找每行次大值中的最大值部分:
for (i = 1 ; i <= n ; i++)
{
t1 = t2 = 0;
for (j = 1 ; j <= n ; j++)
{
if (s[i][j] > t1) t1 = s[i][j];
if (t1 > t2) swap(t1, t2);
}
if (t < t1) t = t1;
}
很明显,t为每行次大值(t1)的最大值。也就是我们的所求。
本题,最重要的是想到解决的方法,一旦方法确定,程序实现,相当简单。也望各位选手能够逐渐提高自己的思维方式。让自己的能力逐渐提升。
0 条评论
信息
- ID
- 1809
- 难度
- 3
- 分类
- (无)
- 标签
- 递交数
- 839
- 已通过
- 428
- 通过率
- 51%
- 被复制
- 16
- 上传者