70分求助!!
查看原帖
70分求助!!
758431
jingkangyu楼主2023/7/23 09:48
#include<bits/stdc++.h>
using namespace std;
int ans=1e5,n;
int a[30]={0,1,16,81,256,625,1296,2401,4069,6561,10000,14641,20736,28561,38416,50625,65536,83521,104976,130321,160000};
int dfs(int p,int x,int sum){
	if(sum>n||p>ans||x>20||a[x]>n||x<1)return 0;
	else if(sum==n)ans=min(ans,p);
	else{
		ans=min(ans,p+n-sum);
		dfs(p+1,x+1,sum+a[x+1]);
		dfs(p,x+1,sum+a[x+1]-a[x]);
		dfs(p+1,x,sum+=a[x]);
		
	}
	return 0;
}
int main(){
	cin>>n;
	int t=1;
	while(a[t]<=n)++t;
	dfs(1,1,1);
	cout<<ans;
	return 0;
}
2023/7/23 09:48
加载中...