一个数n的最少可以由多少个数的平方和组成

 1 bool is_sqrt(int n){
 2     for(int i=1;i<=sqrt(double(n));i++){
 3         if(i*i == n)
 4             return true;
 5     }
 6     return false;
 7 }
 8 int pow_number(int mp){
 9     int* a = new int[mp+1];
10     a[0] = 1;
11     a[1] = 1;
12     if(mp==1) return 1;
13     if(is_sqrt(mp))return 1;
14     //int min = 0x8FFFFFFF;
15     for(int i=2;i<=mp;++i)
16     {
17         if(is_sqrt(i)){
18             a[i]=1;
19             continue;
20         }
21         a[i] = a[1]+a[i-1];
22         for(int j=i-1;j>=i/2;--j){
23             a[i] = a[i]<(a[j]+a[i-j])?a[i]:(a[j]+a[i-j]);
24         }
25     }
26     int temp = a[mp];
27     delete[] a;
28     return temp;
29 }

利用动态规划。

posted @ 2015-09-10 08:20  舒克_贝塔  阅读(716)  评论(0编辑  收藏  举报