import java.util.Scanner; public class Main { private static final int[] coins = new int[]{64, 16, 4, 1}; private static final int OWN = 1024; public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ // solution1(in); solution2(in); } } /** * 模拟法: 贪心 */ private static void solution1(Scanner in){ int pay = in.nextInt(); int money = OWN-pay; int result = 0; int len = coins.length; for(int i=0; i<len; i++){ result += money/coins[i]; money %= coins[i]; } System.out.println(result); } /** * 动态规划 * * dp[i]表示找零为i时收到的最少硬币数 * * dp[i] = Math.min(dp[i], dp[i-coins[j]]+1) * * @param in */ private static void solution2(Scanner in){ int pay = in.nextInt(); int money = OWN-pay; int[] dp = new int[money+1]; int len = coins.length; for(int i=1; i<=money; i++){ dp[i] = i; for(int j=0; j<len; j++){ if(i >= coins[j]){ dp[i] = Math.min(dp[i], dp[i-coins[j]]+1); } } } System.out.println(dp[money]); } }