【题解】 [USACO 2008 OCT] Bovine Bones G
题目描述
题目大意
给出三个整数 \(s_1, s_2, s_3\),求对于 \(i\in \left [ 1, s_1 \right ] , j\in \left [ 1, s_2 \right ], k\in \left [ 1, s_3 \right ]\),哪个 \(i + j + k\) 出现次数最多。
思路
首先,看到【数据范围】:\(2 \le s_1, s_2 \le 20, 2 \le s_3 \le 40\)。这么小的数据范围,可以直接暴力AC。
直接枚举每个骰子的点数累计出现次数,最后找出现次数最多的点数和即可。
代码
#include <bits/stdc++.h>
using namespace std;
int a, b, c;
int t[105]; // 统计出现次数
int main()
{
scanf("%d%d%d", &a, &b, &c);
// 枚举每个骰子的点数,并累加出现次数
for (int i = 1; i <= a; i ++ )
for (int j = 1; j <= b; j ++ )
for (int k = 1; k <= c; k ++ )
t[i + j + k] ++ ;
// 找出 出现次数最多的点数
int ans = 0;
for (int i = 3; i <= a + b + c; i ++ )
if (t[i] > t[ans])
ans = i;
printf("%d\n", ans);
return 0;
}

浙公网安备 33010602011771号