1
/*
2
*dp使用ans[i][j]记录第i位以j结尾的数字的个数
3
*ans[i][j]=sum(ans[i-1][k]) (k>=j)
4
*所求就是sum(ans[i][j]) (0<=j<=9)
5
*最后就是注意一下用int溢出
6
*/
7
8
#include
<memory.h>
9
#include
<iostream>
10
using
namespace std;
11
long
long ans[
70][
10];
12
void set()
13 {
14 memset(ans,
0,
sizeof(ans));
15
for(
int i=
0;i<
10;i++)
16 ans[
1][i]=
1;
17
for(
int i=
2;i<
70;i++)
18 {
19
for(
int j=
0;j<
10;j++)
20
for(
int k=j;k<
10;k++)
21 ans[i][k]+=ans[i-
1][j];
22 }
23 }
24
int main()
25 {
26 set();
27
int t;
28 cin>>t;
29
while(t--)
30 {
31
int n,m;
32 cin>>n>>m;
33
long
long num=
0;
34
for(
int i=
0;i<
10;i++)
35 num+=ans[m][i];
36 cout<<n<<
" "<<num<<endl;
37 }
38 }
39
转载于:https://www.cnblogs.com/congzc/archive/2011/05/20/2329953.html