Put the Apples
| Time Limit: 1000MS |
|
Memory Limit: 10000K |
| Total Submissions: 26595 |
|
Accepted: 16906 |
Description
Put m the same apples on n the same plate, allow some plates to be empty, ask how many different ways? (denoted by k) 5,1,1 and 1,5,1 are the same kind of sub-method.
Input
The first line is the number of test data t (0 <= T <= 20). Each of the following lines contains two integers m and n, separated by a space. 1<=m,n<=10.
Output
For each set of data entered M and N, the corresponding k is output in one line.
Sample Input
17 3
Sample Output
8
Source
[Email protected]
A simple DP question, set DP[I][J] means the number of plans to put the I apple into a J plate, the plate allows free
If I or J is 1, then the scheme is 1, if I < J, there must be empty plates, but which of the few are indifferent, so at this time dp[i][j] = dp[i][i];
if i = = j, then the plan is to put the I apple into the j-1 plate of the scheme, plus a split plan
If i > J, either there is at least one plate empty, or both (take out J to split the J plate, consider the remaining i-j apples)
#include <map> #include <set> #include <list> #include <stack> #include <queue> #include <vector> #include <cmath> #include <cstdio> #include < cstring> #include <iostream> #include <algorithm> using namespace Std;int dp[15][15]; int main () {int T, M, N;memset (DP, 0, sizeof (DP)), for (int i = 1; I <= one; ++i) {for (int j = 1; j <= One; ++j) {if ( i = = 1 | | j = = 1) {Dp[i][j] = 1;} if (I < j) {Dp[i][j] = dp[i][i];} else if (i = = j) {Dp[i][j] = dp[i][j-1] + 1;} ELSE{DP[I][J] = Dp[i][j-1] + dp[i-j][j];}}} scanf ("%d", &t), while (t--) {scanf ("%d%d", &m, &n);p rintf ("%d\n", Dp[m][n]);} return 0;}
poj1664--put an apple