這題總體來說還是比較簡單的,網友們覺得看一看就可以得到結果(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函數,用的很好。