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
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