1. 程式人生 > >洛谷——P1679 神奇的四次方數

洛谷——P1679 神奇的四次方數

while reg copy get mem 描述 不出 define string

P1679 神奇的四次方數

題目描述

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

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

輸入輸出格式

輸入格式:

一行,一個整數m。

輸出格式:

一行,一個整數n。

輸入輸出樣例

輸入樣例#1: 復制
706
輸出樣例#1: 復制
2

說明

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

搜索??似乎不大可行、、、(因為連樣例都跑不出來、、、(ORZ))

技術分享圖片
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,ans=99999;
int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<0||ch>9){if(ch==-
)f=-1;ch=getchar();} while(ch>=0&&ch<=9) x=x*10+ch-0,ch=getchar(); return x*f; } void dfs(int tot,int s) { if(s==n) { ans=min(ans,tot); return ; } for(int i=20;i>=1;i--) if(s+pow(i,4)<=n) dfs(tot+1,s+pow(i,4)); }
int main() { n=read(); dfs(0,0); printf("%d",ans); return 0; }
ZZ搜索


完全背包

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 101000
using namespace std;
int n,m,f[N],w[20];
int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<0||ch>9){if(ch==-)f=-1;ch=getchar();}
    while(ch>=0&&ch<=9) x=x*10+ch-0,ch=getchar();
    return x*f;
}
int main()
{
    memset(f,127,sizeof(f));
    m=read(),n=18,f[0]=0;
    for(int i=1;i<=n;i++)
     w[i]=i*i*i*i;
    for(int i=1;i<=n;i++)
     for(int j=w[i];j<=m;j++)
      if(f[j]>f[j-w[i]]+1)
       f[j]=f[j-w[i]]+1;
    printf("%d",f[m]);
    return 0;
}

洛谷——P1679 神奇的四次方數