https://www.acmicpc.net/problem/11057
풀이: a[i][t] 는 길이가 i인 수에서 1의 자리가 t인 수의 오르막 수의 개수 a[i][t] += max(a[i - 1][t], a[i][t - 1]); 코드: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <iostream>#include <algorithm>using namespace std; int a[1002][1002] = { 0 }; int main(void) { int n, m; cin >> n >> m; for (int i = 1; i <= n; i++) { for (int t = 1; t <= m; t++) { cin >> a[i][t]; } } for (int i = 1; i <= n; i++) { for (int t = 1; t <= m; t++) { a[i][t] += max(a[i - 1][t], a[i][t - 1]); } } cout << a[n][m] << endl; return 0; }
https://www.acmicpc.net/problem/1699
풀이: q[i] 는 i 일 때 제곱수로 나타낼 수 있는 최소의 경우의 수 n 이 i + t^2 으로 나타내 질 때, 최소의 경우의 수를 찾음 코드: 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 #include <iostream>#include <math.h>int q[100002] = { 0 }; using namespace std; int main(void) { int n,a; cin >> n; a = sqrt(n); for (int i = 1; i <= n; i++) { q[i] = 10001; for (int t = 1; t <= a; t++) { if (i == t*t) q[i] = 1; } } for (int i = 1; i <= n; i++) { for (int t = 1; t <= a; t++) { if (i + (t*t) <= n && q[i + (t*t)] > q[i] + 1) q[i + (t*t)] = q[i] + 1; } } cout << q[n] << endl; }
https://www.acmicpc.net/problem/2163
풀이: N x M 크기의 초콜릿을 자르는 최소의 경우의 수 N * M - 1 코드: 1 2 3 4 5 6 7 8 #include <iostream>using namespace std; int main(void) { int n, m; cin >> n >> m; cout << n*m - 1 << endl; return 0; }