Dollar Dayz
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 2912 | Accepted: 1158 |
Description
Farmer John goes to Dollar Days at The Cow Store and discovers an unlimited number of tools on sale. During his first visit, the tools are selling variously for $1, $2, and $3. Farmer John has exactly $5 to spend. He can buy 5 tools at $1 each or 1 tool at $3 and an additional 1 tool at $2. Of course, there are other combinations for a total of 5 different ways FJ can spend all his money on tools. Here they are:
1 @ US$3 + 1 @ US$2 1 @ US$3 + 2 @ US$1 1 @ US$2 + 3 @ US$1 2 @ US$2 + 1 @ US$1 5 @ US$1Write a program than will compute the number of ways FJ can spend N dollars (1 <= N <= 1000) at The Cow Store for tools on sale with a cost of $1..$K (1 <= K <= 100).
Input
A single line with two space-separated integers: N and K.
Output
A single line with a single integer that is the number of unique ways FJ can spend his money.
Sample Input
5 3
Sample Output
5
Source
dp入门题。看成完全背包即可,要用高精度。
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
static final int maxn = 1000 + 5;
static final int maxk = 100 + 5;
static BigInteger dp[][]=new BigInteger[maxk][maxn];
static void solve() {
for (int i = 0; i < maxk; i++) dp[i][0] = BigInteger.ONE;
for (int i = 1; i < maxn; i++) dp[0][i] = BigInteger.ZERO;
for (int i = 1; i < maxk; i++) {
for (int j = 1; j < maxn; j++) {
if (j >= i) dp[i][j] = dp[i - 1][j].add(dp[i][j - i]);
else dp[i][j] = dp[i - 1][j];
}
}
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n, k;
solve();
while (cin.hasNext()) {
n = cin.nextInt();
k = cin.nextInt();
System.out.println(dp[k][n]);
}
}
}