hihocoder 1372 平方求和

来源:互联网 发布:java redis isinmulti 编辑:程序博客网 时间:2024/05/22 02:28
#include <bits/stdc++.h>using namespace std;const int mx=1000000001+100000;int n;vector<int> g;int dfs(int num,int cnt,int limit){    if(num==0) return 0;    int p=upper_bound(g.begin(),g.end(),num)-g.begin()-1;    p=min(p,limit);    while(p>=0&&num/g[p]<cnt)    {        cnt=min(dfs(num-g[p],cnt-1,p)+1,cnt);        if(cnt<=2) break;        p--;    }    return cnt;}int main(){    for(int i=1;i*i<mx;i++)    {        g.push_back(i*i);    }    while(scanf("%d",&n),n!=-1)    {       if(n==0) {cout<<"1"<<endl;continue;}       int lim=upper_bound(g.begin(),g.end(),n)-g.begin()-1;        cout<<dfs(n,5,lim)<<endl;    }    return 0;}

加了点优化,有些可能没有必要,懒得改了,好像最多不超过四个完全平方数

0 0
原创粉丝点击