题解:P2911 [USACO08OCT] Bovine Bones G

· · 题解

简化题意

给定三个数 s1,s2,s3,定义 1 \le a \le s1,1 \le b \le s2,1 \le c \le s3 ,求所有组合中最频繁的相加之和。

思路

由数据范围 2 \le S_1 \le 202 \le S_2 \le 202 \le S_3 \le 40 很快便想到暴力枚举,对于相加的结果用一个桶数组累加次数。

注意事项

由数据范围得知累加和最多为 20 + 20 + 40 = 80,故桶数组 t 开到 80 +5 = 85

桶数组 t、最多次数 num 需要初始化为 0 或使其变为全局变量以实现全部初始化为 0。

代码

# include <bits/stdc++.h>
using namespace std;
int s1,s2,s3,t[85],ans,num;
int main(){
    cin>>s1>>s2>>s3;
    for (int u=1;u<=s1;u++)
        for (int v=1;v<=s2;v++)
            for (int w=1;w<=s3;w++)
                if (++t[u+v+w]>num)
                    num=t[u+v+w],ans=u+v+w;
    cout<<ans;
    return 0;
}