window.cnblogsConfig = {//可以放多张照片,应该是在每一个博文上面的图片,如果是多张的话,那么就随机换的。 homeTopImg: [ "https://i.loli.net/2019/08/02/5d440029af8e994539.png" ], }

UVA11218的题解

题目翻译大意

有九个人要去 KTV 唱歌,每三个人为一组分成三组,现在给出了 \(n\) 种分的组合,输入四个数 \(a,b,c,s\) 分别代表 \(a,b,c\) 这三个人的构成一个组合能获得 \(s\) 分,现在要求最多能获得多少得分。如果无法把分配九个人就输出 -1

  • 分析数据范围:

    看这数据,\(n < 81\) 不就是明显摆着让我们暴搜的吗?

  • 做题思路:

    考虑暴力。由于需要分成三组,可以直接枚举三个组,随后判断是否成立,若成立,求最大值。

  • 代码:

#include <bits/stdc++.h> using namespace std; int n; int a[81][4]; int ans; int vis[10]; int check(int x, int y, int z) { memset(vis, 0, sizeof(vis)); int ret = a[x][3] + a[y][3] + a[z][3]; for (int i = 0; i < 3; i++) vis[a[x][i]]++, vis[a[y][i]]++, vis[a[z][i]]++; for (int i = 1; i <= 9; i++) if (vis[i] > 1) return -1; return ret; } int main() { int cnt = 0; while (1) { cnt++; cin >> n; ans = -1; if (n == 0) break; for (int i = 0; i < n; i++) for (int j = 0; j < 4; j++) cin >> a[i][j]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) ans = max(ans, check(i, j, k)); printf("Case %d: %d\n", cnt, ans); } return 0; }

__EOF__

本文作者mgcjade
本文链接https://www.cnblogs.com/mgcjade/p/17978470.html
关于博主:蒟蒻一枚,I AK IOI!(不可能的)
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   mgcjade  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示