演算法hw3_鐵條
user_3763047219
c_cpp
3 years ago
884 B
8
Indexable
int main() { int k = 0; int p[100]; scanf("%d", &k); for (int i = 1; i <= k; i++) { scanf("%d", &p[i]); } int r[100] = { 0 }, s[100] = {0}; for (int i = 1; i <= k; i++) { int q = -1; for (int j = 1; j <= i; j++) { if (q >= p[j] + r[i - j]) { q = q; } else { q = p[j] + r[i - j]; s[i] = j; } r[i] = q; } } int s_total = 0; int s_index = k; int s_num[100] ; int index = 1; while (s_index != -1) { if (s[s_index] == s_index) { s_total = s_total + 1; s_num[index] = s[s_index]; s_index = -1; index = index + 1; } else { s_total = s_total + 1; s_num[index] = s[s_index]; s_index = s_index-s[s_index]; index = index + 1; } } printf("%d\n%d\n", r[k], s_total); printf("%d=%d", k, s_num[1]); for (int i = 2; i <= s_total; i++) { printf("+%d", s_num[i]); } }
Editor is loading...