Algorithm ๐ง๐ป๐ป/๋ฐฑ์ค(BOJ)
[๋ฐฑ์ค,c++] 14391๋ฒ - ์ข ์ด ์กฐ๊ฐ
dkswnkk
2021. 11. 7. 23:12
14391๋ฒ: ์ข ์ด ์กฐ๊ฐ
์์ ์ด๋ ์ซ์๊ฐ ์ฐ์ฌ ์๋ ์ง์ฌ๊ฐํ ์ข ์ด๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ข ์ด๋ 1×1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๊ณ , ์ซ์๋ ๊ฐ ์นธ์ ํ๋์ฉ ์ฐ์ฌ ์๋ค. ํ์ ์์์๋ถํฐ ์๋๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๊ณ ,
www.acmicpc.net
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int map[4][4];
int main(){
int N,M; cin>>N>>M;
for(int i=0; i<N; i++){
for(int k=0; k<M; k++){
scanf("%1d",&map[i][k]);
}
}
int ans=-9999;
for(int i=0; i<(1<<N*M); i++){ //0: -(๊ฐ๋ก), 1:|(์ธ๋ก)
int sum=0;
for(int a=0; a<N; a++){ //๊ฐ๋ก ์ ๋์ ํฉ ๊ฒ์ฌ
int score=0;
for(int b=0; b<M; b++){
int row=a*M+b; //๊ฐ ์นธ๋ง๋ค ์์๋๋ก ๋ฒํธ๋ฅผ ๋งค๊ฒผ์๋ ์ธ๋ฑ์ค ๋ฒํธ;
if((i&(1<<row))==0) score=score*10+map[a][b]; //์ฐ์๋๋ ๊ฐ๋ก ์ผ๋ ์ ์ ๋ํด์ค
else{
sum+=score;
score=0;
}
}
sum+=score;
}
for(int a=0; a<M; a++){ //์ธ๋ก์ ๋์ ํฉ ๊ฒ์ฌ
int score=0;
for(int b=0; b<N; b++){
int col=b*M+a;
if((i&(1<<col))!=0) score=score*10+map[b][a]; //์ฐ์๋๋ ๊ฐ๋ก ์ผ๋ ์ ์ ๋ํด์ค
else{
sum+=score;
score=0;
}
}
sum+=score;
}
ans=max(ans,sum);
}
cout<<ans;
}