PS

BOJ 12796 : 나의 행렬곱셈 답사기

lickelon 2024. 3. 29. 22:48
  • 문제 링크 : boj.kr/12796
  • 난이도 : G5
  • 태그 : 애드혹, 해 구성하기
 

12796번: 나의 행렬곱셈 답사기

첫 줄에 K를 만족시킬 수 있는 데이터의 행렬 개수 정수 N(1 ≤ N ≤ 100)을 출력한다. 둘째 줄에는 해당 행렬의 정보를 (N+1)개의 정수 a0, a1, .., an로 나타내어 출력한다. 행렬의 크기는 a0 x a1, a1 x a2,

www.acmicpc.net


코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int k;
    cin >> k;
    cout << "3\n1 1 1 " << k+1;

    return 0;
}

풀이

행렬이 4개 이상인 경우에는 생각하기 어려우므로 3개일때 가능한지 생각해보자.

행렬이 3개이고 각 행렬의 크기가 (a,b), (b,c), (c,d)라고 하자. 이때 가능한 연산횟수는 a*b*c+a*c*d, b*c*d+a*b*d이다. 

b*c*d+a*b*d가 항상 더 크다고 가정하고 차를 구해보자. 이때 두 수의 차는 cd(b-a)+ab(d-c)이다.

a=b=1이라고 하면 두 수의 차는 d-c가 되고 이를 k로 만드는건 쉽다.

'PS' 카테고리의 다른 글

BOJ 12934 : 턴 게임  (0) 2024.03.31
BOJ 26524 : 방향 정하기  (0) 2024.03.30
BOJ 17298 : 오큰수  (0) 2024.03.28
BOJ 2493 : 탑  (0) 2024.03.27
BOJ 13422 : 도둑  (0) 2024.03.26