题目描述
已知正整数n,将其分为0到多个25、10、5、1这四个数的和。如n为11可分为一个10和一个1,或者分为两个5和一个1。返回n有多少种分法。保证n小于等于100000,请将答案Mod 1000000007以防止溢出。
测试样例:
6
返回:2
import java.util.*;
public class Coins {
static final int mod = 1000000007;
public int countWays(int n) {
if ( n<1) return 0;
// write code here
//0到多个25、10、5、1这四个数的和
// n为11可分为一个10和一个1,或者分为两个5和一个1
//6 = 6*1 + (1+5)
int[] dp = new int[n+1];
int[] state = { 1,5,10,25 };
dp[0] = 1;
for(int s: state) {
for(int i=s;i<=n;++i) {
dp[i] = (dp[i]+dp[i-s]) % mod;
}
}
return dp[n];
}
}