NYOJ 90

View Code
 1 /*
2 观察题目可以发现:
3 划分一个整数 如:n
4 分别是以 n开头,以n-1开头...,以1开头等
5 相当于最大的是开头的那个 其余的数不能超过这个数
6
7 */
8
9 #include<iostream>
10 using namespace std;
11 int query(int n,int x)
12 {
13 if(x<1||n<1)return 0;
14 if(x==1||n==1)return 1;
15 if(n<x)return query(n,n);//对于n<x说明整数是n 最大也是以n开头
16 if(n==x)return query(n,n-1)+1;//对于把query(n,n)分解
17 //成query(n,n-1)+1的1表示
18 //以整数n 以n 开头的有一个
19 return query(n,x-1)+query(n-x,x);//对于n>x来说
20 //query(n-x,x)表示的是
21 //整数n以x开头 之后还剩多少要划分
22 //相当于又对整数n-x最大不超过x进行划分
23 //而query(n,x-1)相当于整数n 以一个更小的开头了
24 }
25 int main()
26 {
27 int m,n;
28 cin>>m;
29 while(m--)
30 {
31 cin>>n;
32 cout<<query(n,n)<<endl;
33 }
34 system("pause");
35 return 0;
36 }

 

你可能感兴趣的:(OJ)