每日一题---组队

在这里插入图片描述
在这里插入图片描述
这题总体来说还是比较简单的,网友们觉得看一看就可以得到结果(490),所以呢,就这样水过去了,我个人不以为然,既然写题解就应该老老实实贴上代码,我看很多都是dfs,无奈我还不太会搜,所以呢就尝试了暴力枚举,一开始还没成功,需要注意也有几点,先贴代码:

#include<iostream>
using namespace std;
int a[20],b[20],c[20],d[20],e[20];
int main(){
	int sum,max=0;
	for(int i=0;i<20;i++){
		cin>>a[i]>>b[i]>>c[i]>>d[i]>>e[i];
	}
	for(int i=0;i<20;i++){
		for(int j=0;j<20;j++){
			for(int k=0;k<20;k++){
				for(int p=0;p<20;p++){
					for(int q=0;q<20;q++){
						if(i!=j&&i!=k&&i!=p&&i!=q&&j!=k&&j!=p&&j!=q&&k!=p&&k!=q&&p!=q){
							sum=a[i]+b[j]+c[k]+d[p]+e[q];
					        if(max<sum) max=sum;
						}else{
						    continue;	
						}
					}
				}
			}
		}
	}
	cout<<max;
	return 0;
}

第一点需要注意的是一定要有continue才行,不然逻辑不通。
第二点就是一定要仔细,我都说不出口,难受~~,输出是max,我居然写成了sum,还在纠结代码哪错了??一万句mmp。。。
除了这样枚举外,还有其他的办法,反正思路都一样,比如你也可以用二维数组来枚举,定义一个简单的结构体来枚举都行,下面再贴一个代码供参考:

#include<bits/stdc++.h>
using namespace std;
int a[20][5],res; 
int main()
{
    for(int i=0;i<20;i++){
        for(int j=0;j<5;j++)
		  cin>>a[i][j];
    }
	for(int i=0;i<20;i++){
		for(int j=0;j<20;j++){
			if(i==j) continue;
			for(int k=0;k<20;k++){
				if(i==k||j==k) continue;
				for(int l=0;l<20;l++){
					if(i==l||j==l||k==l) continue;
					for(int t=0;t<20;t++){
					if(t==i||t==j||t==k||t==l) continue;
						res=max(a[i][0]+a[j][1]+a[k][2]+a[l][3]+a[t][4],res);
					}
				}
			}
		}
	}
	cout<<res<<endl;
}

嗯。。这不是本人写的代码,这是在我没发现输出不是max的时候好不容易在网上翻出的用枚举来解决这题的代码,这个网友用二维数组来解决(嗯~还不错)尤其这位网友在这里用的max函数,用的很好。

发布了131 篇原创文章 · 获赞 58 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_43595030/article/details/104746847
今日推荐