1. 程式人生 > >神奇的四次方數 無限揹包

神奇的四次方數 無限揹包

 

背景描述:
在你的幫助下,v神終於幫同學找到了最合適的大學,接下來就要通知同學了。在班級裡負責聯絡網的是dm同學,於是v神便找到了dm同學,可dm同學正在忙於研究一道有趣的數學題,為了請dm出山,v神只好請你幫忙解決這道題了。
題目描述:將一個整數m分解為n個四次方數的和的形式,要求n最小。例如,m=706,706=5^4+3^4,則n=2。
輸入資料:一行,一個整數m。
輸出資料:一行,一個整數n。

樣例資料:
input:
706

output:
2

資料範圍:對於30%的資料,m<=5000;對於100%的資料,m<=100,000

const md=1000000000;
var f:array[0..1000000] of longint;
a:array[0..200] of longint;
n,m,i,j,k,sum:longint;
function min(x,y:longint):longint;
begin
 if x<y then exit(x);
 exit(y);
end;
begin
 assign(input,'input.in'); assign(output,'output.out');
 reset(input); rewrite(output);
 readln(m);
 for i:=1 to 20 do
  a[i]:=i*i*i*i;
 for i:=1 to m do
  f[i]:=md;
 for i:=1 to 20 do
  for j:=a[i] to m do
   f[j]:=min(f[j],f[j-a[i]]+1);
 writeln(f[m]);
 close(input); close(output);
end.