题目地址:

https://www.acwing.com/problem/content/589/

惠特利在参加世界上最好的派对:它有着无数的蛋糕!每个蛋糕都呈具有整数边长( c m cm cm)的正方形形状。派对上有无限多个边长为任意整数的蛋糕。蛋糕都有相同的高度,所以我们只考虑它们的面积。惠特利决定吃一个或多个蛋糕,使其总面积恰好为 N c m 2 N\ cm^2 N cm2。你能帮他计算一下他最少需要吃掉多少个蛋糕吗?

输入格式:
第一行包含整数 T T T,表示共有 T T T组测试数据。每组数据占一行,包含一个整数 N N N,为惠特利想吃掉的蛋糕的总面积。

输出格式:
每组数据输出一个结果,每个结果占一行。结果表示为Case #x: y,其中 x x x是组别编号(从 1 1 1开始), y y y是惠特利最少需要吃掉的蛋糕数量。

数据范围:
1 ≤ T ≤ 100 1≤T≤100 1≤T≤100
1 ≤ N ≤ 10000 1≤N≤10000 1≤N≤10000

可以视为有无限个体积为 1 , 2 2 , 3 2 , . . . 1,2^2,3^2,... 1,22,32,...的物品,填满容积为 N N N的背包的最少物品个数。这是个完全背包问题。设 f [ i ] [ j ] f[i][j] f[i][j]是只从前 i i i个物品里选的情形下,要填满容积为 j j j的背包的最少物品个数,那么 f [ 0 ] [ 0 ] = 1 , f [ 0 ] [ . > 0 ] = ∞ f[0][0]=1,f[0][.>0]=\infty f[0][0]=1,f[0][.>0]=∞,后者表示不存在这样的方案。我们先将所有 f [ . > 0 ] f[.>0] f[.>0]的数都初始化为 ∞ \infty ∞,然后递推: f [ i ] [ j ] = min ⁡ { f [ i − 1 ] [ j ] , min ⁡ k 2 ≤ j { 1 + f [ i ] [ j − k 2 ] } } f[i][j]=\min\{f[i-1][j],\min_{k^2\le j}\{1+f[i][j-k^2]\}\} f[i][j]=min{f[i−1][j],k2≤jmin​{1+f[i][j−k2]}}注意如果某个 f [ i ] [ j − k 2 ] = ∞ f[i][j-k^2]=\infty f[i][j−k2]=∞说明不存在方案,要略过。可以写成一维数组来递推,其中体积要从小到大循环。代码如下:

#include <iostream>
#include <cstring>
using namespace std;const int N = 10010, INF = 0x3f3f3f3f;
int n;
int f[N];int main() {int T;cin >> T;for (int t = 1; t <= T; t++) {cin >> n;memset(f, 0x3f, sizeof f);f[0] = 0;for (long i = 1; i * i <= n; i++)for (int j = i * i; j <= n; j++)if (f[j - i * i] != INF)f[j] = min(f[j], f[j - i * i] + 1);printf("Case #%d: %ld\n", t, f[n]);}return 0;
}

时间复杂度 O ( N N ) O(N\sqrt N) O(NN ​),空间 O ( N ) O(N) O(N)。

【ACWing】587. 吃蛋糕相关推荐

  1. 先吃奶油还是先吃蛋糕--推迟满足感

    先吃奶油还是先吃蛋糕--推迟满足感 作者:M·斯科特·派克 来源:意林 不久前,一位30岁的财务分析师向我请求帮助,她想纠正自己最近几个月里总是拖延工作的恶习.我们探讨了她对老板的看法,老板对她的态度 ...

  2. 切蛋糕 爱丽丝梦游仙境,来到了疯帽子的茶会。茶会上有n只兔子,疯帽子作为绅士,今天专门为爱丽丝和兔子们准备了一个圆形的慕斯蛋糕,疯帽子要把这块蛋糕平均分给爱丽丝和兔子们(疯帽子自己不吃蛋糕)

    Description 爱丽丝梦游仙境,来到了疯帽子的茶会.茶会上有n只兔子,疯帽子作为绅士,今天专门为爱丽丝和兔子们准备了一个圆形的慕斯蛋糕,疯帽子要把这块蛋糕平均分给爱丽丝和兔子们(疯帽子自己不吃 ...

  3. 1018 - 数论之扩展欧几里得 - 吃蛋糕

    吃蛋糕 描述 Beny 想要用蛋糕填饱肚子.Beny 一共想吃体积为 c 的蛋糕,他发现有两种蛋糕可以吃,一 种体积为 a,一种体积为 b,但两种蛋糕各有特色.Beny 想知道他一共有多少种不同吃法, ...

  4. 生肖迷宫之福娃吃蛋糕问题

    [问题描述] 5个福娃吃5个奥运蛋糕,1只福娃吃掉1个蛋糕需要60分钟,怎样才能确定一段30分钟的时间,太简单了,那么10分钟呢?还不难吧,但是9.5分钟呢?最后如何确定一段少于10秒钟的时间呢(不算 ...

  5. C++题解:吃蛋糕 (新)

    题目链接 题目描述 Beny 想要用蛋糕填饱肚子.Beny 一共想吃体积为 c 的蛋糕,他发现有两种蛋糕可以吃,一种体积为 a,一种体积为 b,但两种蛋糕各有特色.Beny 想知道他一共有多少种不同吃 ...

  6. 【WOJ 4078】吃蛋糕

    [题目] 题目描述: Beny 想要用蛋糕填饱肚子.Beny 一共想吃体积为 c c c 的蛋糕,他发现有两种蛋糕可以吃,一 种体积为 a a a,一种体积为 b b b,但两种蛋糕各有特色.Beny ...

  7. 【JZOJ A组】吃蛋糕

    Description Beny 想要用蛋糕填饱肚子.Beny 一共想吃体积为 c 的蛋糕,他发现有两种蛋糕可以吃,一种体积为 a,一种体积为 b,但两种蛋糕各有特色.Beny 想知道他一共有多少种不 ...

  8. 2524. 吃蛋糕 (新) (Standard IO)

    题目描述 Beny 想要用蛋糕填饱肚子.Beny 一共想吃体积为 c 的蛋糕,他发现有两种蛋糕可以吃,一种体积为 a,一种体积为 b,但两种蛋糕各有特色.Beny 想知道他一共有多少种不同吃法, 使得 ...

  9. 首个双手控制脑机接口:开颅手术 10 小时植入 6 个电极,瘫痪人士用意念吃蛋糕

    本文转载自 雷锋网,作者 付静 有这样一位名为 Buz Chmielewski 的男子,曾在一次出海冲浪时不幸遭遇意外,四肢瘫痪.从正值十几岁的大好年华到此后的 30 余年里,Buz Chmielew ...

最新文章

  1. 构造函数与折构函数(c++细节篇五)
  2. python tkinter控件_python GUI作业:使用tkinter的重要控件
  3. 关于蚁剑/菜刀无法连接shell的一种可尝试解决方案
  4. 怎么汉语_3分钟,让您明白孩子的汉语应该怎么学!(13年级家长必看)
  5. iPhone应用程序编程指南(图形和描画)
  6. UnixLinux大学教程目录
  7. 针对灰鸽子声明 金山“四问”灰鸽子工作室
  8. Datastructure
  9. 吴恩达神经网络和深度学习-学习笔记-7-正则化regularization方法
  10. mysql innodb cluster服务器搭建
  11. mysql 删除数据后myd_关于mysql 删除数据后(.MYD,MYI)物理空间未释放
  12. 五分钟看懂vue路由守卫
  13. 修改NPM的默认安装路径
  14. Arduino入门(一)
  15. 微信小程序转码机器人❤️免费无水印❤️
  16. 博士申请 | 美国乔治梅森大学计算机系招收机器学习方向全奖博士生
  17. Excel 表列序号
  18. 解决Duplicate entry '……
  19. svn设置 修改服务器,svn设置 修改服务器ip地址
  20. java音视频开发技术_FFmpeg音视频核心技术精讲与实战

热门文章

  1. kill -9 进程 杀掉僵死进程
  2. 简述人工神经网络的定义,简述神经网络算法
  3. Chrome调试工具调试CSS
  4. Jarvis-OJ WEB 多题writeup
  5. maven多模块依赖导入失败以及私服下载包卡死
  6. C/C++中的绝对值函数
  7. 【苹果CMS技术教程】苹果CMSV10伪静态基础认识和设置教程
  8. 如何解除80端口被占用
  9. 如何用钢笔工具抠图ps教程ps学习
  10. LLC输出滤波电容选择