题解 | 硬币凑钱 c#
硬币凑钱
https://www.nowcoder.com/practice/a9228c3f450749a5bc8edd2f0e7b90e9
using System;
using System.Collections.Generic;
public class Program {
public static void Main() {
long.TryParse(Console.ReadLine(), out long num);
//每个状态,可由dp[i-1],dp[i-5],dp[i-7]三种状态+1转换过来,故只需要对比这三种状态拿到最小值加一就行
List<long> dp = new List<long> { };
dp.Add(1);
dp.Add(2);
dp.Add(3);
dp.Add(4);
dp.Add(1);
dp.Add(2);
dp.Add(1);
if (num <= 7) {
Console.WriteLine(dp[(int)num - 1]);
} else {
for (int i = 7; i < num; i++) {
long min1 = Math.Min(dp[i - 1], dp[i - 5]);
long min2 = Math.Min(dp[i - 7], min1);
dp.Add(min2 + 1);
}
Console.WriteLine(dp[(int)num - 1]);
}
}
}
查看6道真题和解析