티스토리 뷰

Algorithm/SW Expert Academy

2115 벌꿀채취

henry1214 2018. 3. 24. 11:16

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V4A46AdIDFAWu



가로로 m개 놓을 수 있는 겹치지 않는 두개의 구역을 모두 만들어 본다. getProfit 함수를 이용하여 각 구역 내에서 채취할 수 있는 최대 수익을 구한다. 두개의 구역의 리턴값의 합 중에서 가장 큰 값이 정답이다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
 
int t,n,m,c,map[10][10],ans;
 
int getProfit(vector<int> &a)
{
    int MAX=0;
    for(int i=1;i<=m;i++)
    {
        vector<int> p(m,1);
        for(int j=0;j<i;j++) p[j]=0;
        do
        {
            int sqr=0,sum=0;
            for(int j=0;j<m;j++if(p[j]==0)
                sqr+=a[j]*a[j],sum+=a[j];
            if(sum<=c) MAX=max(MAX,sqr);
        } while(next_permutation(p.begin(),p.end()));
    }
    return MAX;
}
 
void solve()
{
    vector<pair<int,int>> v; // 모든 경우의 수의 시작점
    for(int i=0;i<n;i++for(int j=0;j<=n-m;j++)
        v.push_back({i,j});
 
    int size=v.size();
    for(int i=0;i<size;i++)
    {
        for(int j=i+1;j<size;j++)
        {
            int x1=v[i].first,y1=v[i].second;
            int x2=v[j].first,y2=v[j].second;
            if(x1==x2 && abs(y1-y2)<m) continue;
            vector<int> a(m),b(m);
            for(int k=0;k<m;k++)
            {
                a[k]=map[x1][y1+k];
                b[k]=map[x2][y2+k];
            }
            int total=getProfit(a)+getProfit(b);
            ans=max(ans,total);
        }
    }
}
 
int main()
{
    scanf("%d",&t);
    for(int T=1;T<=t;T++)
    {
        scanf("%d %d %d",&n,&m,&c);
        for(int i=0;i<n;i++for(int j=0;j<n;j++)
            scanf("%d",&map[i][j]);
        ans=0;
        solve();
        printf("#%d %d\n",T,ans);
    }
    return 0;
}
cs


'Algorithm > SW Expert Academy' 카테고리의 다른 글

2382 미생물 격리  (0) 2018.03.26
2117 홈 방범 서비스  (0) 2018.03.24
2112 보호 필름  (0) 2018.03.22
2105 디저트 카페  (2) 2018.03.17
1953 탈주범 검거  (0) 2018.03.16
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday