0分求助,感谢
查看原帖
0分求助,感谢
759881
ylch楼主2023/11/4 17:25

WA 0分代码:

#include <algorithm>
#include <iostream>
using namespace std;

const int maxn = 1e5 + 7;
int a[50] , f[maxn]; //a[i]表示i的四次方,f[i]表示m=i时的最少用多少个数

int dfs(int m , int i)
{	//当前的m,当前用到数字几
	if(m == 0 || f[m]){ //算过了或为0就退出
		return f[m];
	}
	int ans = 1e9;
	while(i <= a[0] && a[i] <= m){
		ans = min(ans , dfs(m - a[i] , i) + 1); //加1是要加上当前这一次
		i ++;
	}
	f[m] = ans;
	return f[m];
}

signed main()
{
	int m;
	scanf("%d" , &m);
	//初始化
	int i = 1;
	while(i * i * i * i <= m){
		a[++ a[0]] = i * i * i * i;
		i ++;
	}
	f[0] = 1; //特判,m=0时,0^4 = 0
	printf("%d\n" , dfs(m , 1));
	return 0;
}
2023/11/4 17:25
加载中...