这题总体来说还是比较简单的,网友们觉得看一看就可以得到结果(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函数,用的很好。