考え方
優先順位は- 桁数を増やすこと
- 大きい位に大きな数字を置くこと
よって,
- コスト最小の操作を使って桁数をなるべく増やしたものを求め,
- 上の桁から(予算を超えない限り)なるべく大きな数字で置き換えていく
回答例
N = int(input()) C = list(map(int, input().split())) best_c, best_i = min((c, i + 1) for i, c in enumerate(C)) num = N // best_c N -= best_c * num if num > 0: x = [best_i] * num else: exit(print(0)) cur = 0 for i in range(8, -1, -1): c = C[i] while N - (c - best_c) >= 0 and cur < num: x[cur] = i + 1 N -= (c - best_c) cur += 1 x = list(map(str, x)) print(''.join(x))