洛谷 P1679 神奇的四次方數

題目:神奇的四次方數

網址:https://www.luogu.com.cn/problem/P1679ios

題目描述

在你的幫助下,v神終於幫同窗找到了最合適的大學,接下來就要通知同窗了。在班級裏負責聯絡網的是dm同窗,因而v神便找到了dm同窗,可dm同窗正在忙於研究一道有趣的數學題,爲了請dm出山,v神只好請你幫忙解決這道題了。spa

題目描述:將一個整數m分解爲n個四次方數的和的形式,要求n最小。例如,m = 706, 706 = \(5^4\) + \(3^4\), 則n = 2。code

輸入格式

一行,一個整數m。get

輸出格式

一行,一個整數n。數學

輸入輸出樣例
輸入
706
輸出
2
說明/提示

數據範圍:對於100%的數據,m<=100,000string

這道題估計一下,最大的數不會比18大。所以,預處理18以前數的四次方。接下來徹底揹包。注意預處理。io

代碼以下:class

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int c[17] = {1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000, 14641, 20736, 28561, 38416, 50625, 65536, 83521};
int m, dp[100000];
int main()
{
	scanf("%d", &m);
	memset(dp, 0x3f, sizeof(dp));
	dp[0] = 0;
	for(int i = 1; i <= m; ++ i)
	{
		for(int j = 0; j < 17; ++ j)
		{
			if(i >= c[j]) dp[i] = min(dp[i], dp[i - c[j]] + 1);
		}
	}
	printf("%d\n", dp[m]);
	return 0;
}
相關文章
相關標籤/搜索