- 문제 링크 : 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로 만드는건 쉽다.
728x90
'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 |