每日一題---組隊

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章