完全背包 P1679 神奇的四次方数

P1679 神奇的四次方数

题解

一看这就是个完全背包

m最多不会超过18^4,所以我们把x^4用数组存起来,然后考虑如何填满m,注意存到18^4,不然会像我一样RE。。。

那么问题就转化成完全背包问题,因为一个四次方数可以用多次

设计状态:

f [ i ] [ j ] 表示前 i 个数中,总和不超过 j ,的数的最少个数,

然后我们降一维实现代码即 f [ j ]

注意初始化 f[0]=0

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<queue>

using namespace std;

typedef long long ll;

inline int read()
{
    int ans=0;
    char last=‘ ‘,ch=getchar();
    while(ch<‘0‘||ch>‘9‘) last=ch,ch=getchar();
    while(ch>=‘0‘&&ch<=‘9‘) ans=ans*10+ch-‘0‘,ch=getchar();
    if(last==‘-‘) ans=-ans;
    return ans;
}

int m,n;
int s[20],f[100010];

int main()
{
    m=read();
    for(int i=1;i<=18;i++) s[i]=i*i*i*i;   //之前只算到17,然后我就RE了
//    for(int i=0;i<=17;i++) printf("%d:%d\n",i,p[i]);
    memset(f,0x7f,sizeof(f));
    f[0]=0;  //这里初始化0
for(int i=1;s[i]<=m;i++)
       for(int j=s[i];j<=m;j++){
           f[j]=min(f[j-s[i]]+1,f[j]); //数组下标总不能是负数吧
       }
    printf("%d\n",f[m]);
    return 0;
}

彩蛋

拉格朗日四平方和定理:

四平方和定理说明每个正整数均可表示为n个整数的平方和。(n<=4)

虽然我也不知道这东西有啥用QWQ

原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11966250.html

时间: 2024-10-02 09:59:58

完全背包 P1679 神奇的四次方数的相关文章

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

P1679 神奇的四次方数 题目描述 在你的帮助下,v神终于帮同学找到了最合适的大学,接下来就要通知同学了.在班级里负责联络网的是dm同学,于是v神便找到了dm同学,可dm同学正在忙于研究一道有趣的数学题,为了请dm出山,v神只好请你帮忙解决这道题了. 题目描述:将一个整数m分解为n个四次方数的和的形式,要求n最小.例如,m=706,706=5^4+3^4,则n=2. 输入输出格式 输入格式: 一行,一个整数m. 输出格式: 一行,一个整数n. 输入输出样例 输入样例#1: 复制 706 输出样

洛谷 P1679 神奇的四次方数

P1679 神奇的四次方数 题目描述 在你的帮助下,v神终于帮同学找到了最合适的大学,接下来就要通知同学了.在班级里负责联络网的是dm同学,于是v神便找到了dm同学,可dm同学正在忙于研究一道有趣的数学题,为了请dm出山,v神只好请你帮忙解决这道题了. 题目描述:将一个整数m分解为n个四次方数的和的形式,要求n最小.例如,m=706,706=5^4+3^4,则n=2. 输入输出格式 输入格式: 一行,一个整数m. 输出格式: 一行,一个整数n. 输入输出样例 输入样例#1: 复制 706 输出样

有关货币问题的动态规划题目--有关01背包,完全背包,多重背包

背包dp:参考背包九讲以及给出一些题目 01背包 (先枚举物品,再逆序枚举容量) 给定n件物品和一个容量为V的背包,每件物品的体积是w[i],价值是va[i](1<=i<=n),求在不超过背包的容量的情况下,怎么选择装这些物品使得得到的价值最大? 例如:有5件物品,体积分别是{2,2,6,5,4},价值分别是{6,3,5,4,6} 递归式:F(i,v)=max(F(i-1,v), F(i-1,v-w[i])+va[i]),其中F(i,v)表示把前i种物品恰放入背包容量为v时取得的最大价值 把这

【bzoj5018】[Snoi2017]英雄联盟 背包dp

题目描述 正在上大学的小皮球热爱英雄联盟这款游戏,而且打的很菜,被网友们戏称为「小学生」.现在,小皮球终于受不了网友们的嘲讽,决定变强了,他变强的方法就是:买皮肤!小皮球只会玩N个英雄,因此,他也只准备给这N个英雄买皮肤,并且决定,以后只玩有皮肤的英雄.这N个英雄中,第i个英雄有Ki款皮肤,价格是每款CiQ币(同一个英雄的皮肤价格相同).为了让自己看起来高大上一些,小皮球决定给同学们展示一下自己的皮肤,展示的思路是这样的:对于有皮肤的每一个英雄,随便选一个皮肤给同学看.比如,小皮球共有5个英雄,

hdu 1864 最大报销额【01背包】

题目链接:https://vjudge.net/problem/HDU-1864 题目大意: 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元.现请你编写程序,在给出的一堆发票中找出可以报销的.不超过给定额度的最大报销额. Input 测试输入包含若干测试用例.每个测试用例的第1行包含两个正数 Q 和 N,其中 Q 是给定的报销额度,N(<=30)是发票张数.随后

poj[3093]Margaritas On River Walk

Description One of the more popular activities in San Antonio is to enjoy margaritas in the park along the river know as the River Walk. Margaritas may be purchased at many establishments along the River Walk from fancy hotels to Joe’s Taco and Marga

二模 (5)day1

第一题: 题目大意:解一元一次方程(只有+-符号): 解题过程:直接处理处两边的x的系数和常数项,字符串的处理即可. 第二题: 题目大意:求逆序对数. 解题过程:直接归并排序. 第三题: 题目大意:多重背包.每件物品数较多. 解题过程:二进制拆分物品数..

hdu 3033 I love sneakers!

题目: 链接:点击打开链接 题意: xx喜欢收集鞋子,n,m,k分别表示鞋子的总数,xx的钱和鞋子的品牌数目.然后给出每个鞋子的信息有:a,是那种品牌,b,鞋子的标价,c,收藏鞋子得到的价值.对于一个收藏家来说,每种品牌的鞋子只收集一种,求出xx能够得到的最大的收藏价值. 算法: 分组背包问题. 思路: m总的钱数是背包容量,k品牌数是组数.用数组结构体保存每种鞋子的信息,d[i][j].w表示第i种品牌的鞋子中的第j个鞋子的标价,d[i][j].v表示第i种品牌的鞋子中的第j个鞋子价值.状态转

泰玛斯变色牛仔锌空气电池

牛仔时代来临 泰玛斯变色牛仔崛起之路 当下整个服装行业的发展可谓是高歌猛进,而牛仔系列更是其中的重头戏.随着阿迪达斯.耐克.七匹狼等等国际上主流服装大头纷纷宣布越位发展牛仔行业,本土牛仔企业纷纷采取相关联动政策.而其中,泰玛斯以难以复制的变色牛仔概念巧妙的躲过了市场的冲击,在国际大品牌的打压下收获一批忠实的粉丝. 据该位品牌创始人表示,中国本来就是人口大国,香港泰玛斯国际集团,人口基数大成为了基本国情,带来的是牛仔市场的广阔前景,随着90后组建占据潮流的前线,www.tamsa.cn,一场牛仔改