A - Important Exam(贪心+枚举(就是注意统计个数))

本文介绍了一种解决竞赛编程题目中最大化团队得分的方法,通过枚举和统计技巧,确保尽可能多的学生答对每道题,从而实现总分最大化。代码采用C++实现,详细解释了算法思路和关键步骤。

在这里插入图片描述
在这里插入图片描述
其实这道题看案例就可以明白,然后数据也不大,所以我第一时间想到的就是对于一道题的答案尽可能多的学生写对,这样才能保证拿到的总分最高,主要有点需要思维的是如何枚举的问题,其实直接开个一维string就够了,然后枚举每列;统计出现相同字母次数最多的就行,之后用:个数*分数,就是这个题所对应的所有学生答对的最大分数(注意分数需要用一个数组来存,这样才能在逻辑上对应每个题所对应的答案的下标);
AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string s[1010];
map<char,int> mm;
int main(){
    int n,m;
    int score[1010];
    char c;
    scanf("%d %d",&n,&m);
   for(int i=1;i<=n;i++)cin>>s[i];
    for(int i=1;i<=m;i++) cin>>score[i];
    int Max=0;
    int ans=0,k=0;//这里的k用来枚举列,其实也可以用下面的for循环里面的i-1来表示
	for(int i=1;i<=m;i++){
		Max=0;
    	  for(int j=1;j<=n;j++){
    	  	  mm[s[j][k]]++;
    	  	  Max=max(Max,mm[s[j][k]]);
		  }
		  k++;
		  ans+=Max*score[i];
		  mm.clear();//注意每次循环需要清空
	}
	printf("%d\n",ans);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值