代码改变世界

2372. Non-Decreasing Digits

2011-05-20 09:57  Min·zc  阅读(279)  评论(0编辑  收藏  举报
 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