【题解】 [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;
}
posted @ 2024-08-22 20:11  _TJHtjh  阅读(11)  评论(0)    收藏  举报