分披萨问题_比萨疯狂问题

分披萨问题

Problem statement:

问题陈述:

There is a shop which sells pizza of three different sizes- Small, Medium, and Large Pizza. IncludeHelp is crazy for Pizzas. A small Pizza has an area of 'S' unit2, a medium Pizza has an area of 'M' unit2 and a large Pizza has an area of 'L' unit2. Cost of Small, medium and Large Pizza is 'CS' , 'CM', and 'CL' respectively. IncludeHelp wants at least 'X' unit2 of pizza. What is the minimum amount of money needed to buy at least X unit2 of Pizza? If more than one arrangement is possible, choose that one which requires Least Money. Two arrangements are said to be different if They have different quantities of Small, medium, or large pizzas!

有一家商店出售三种不同尺寸的比萨饼-小,中和大比萨饼。 IncludeHelp对于Pizza来说是疯狂的。 小比萨饼的面积为“ S”单元2 ,中比萨饼的面积为“ M”单元2 ,大比萨饼的面积为“ L”单元2 。 小,中,大披萨的价格分别为“ CS”“ CM”“ CL” 。 IncludeHelp至少需要比萨饼的“ X”单元2购买至少X比萨饼的第2单元所需的最低金额是多少? 如果可能有不止一种安排,请选择一种需要最少钱的安排。 如果有不同数量的小,中或大比萨饼,则这两种安排据说会有所不同!

    Input:
Input contains 6 integers-
X: total area of pizza needed (at least)
S: area of small sized pizza
M: area of medium sized pizza
L: area of large sized pizza
CS: cost of small sized pizza
CM: cost of medium sized pizza
CL: cost of large sized pizza
Output:
Minimum amount of money needed
Constraints
1<=X<=500
1<=S< M< L<=100
1<=CS< CM<CL=1000

Example:

例:

    Input:
X : 17
S : 4 
M : 6 
L : 12 
CS: 40 
CM: 60 
CL: 100
Output:
160

Explanation:

说明:

    IncludeHelp wants at least 17 unit2 of Pizza
Few possible arrangements can be,
5 Small pizza (size of 5*4=20) amounting 200
4 small pizza, one medium pizza (size 4*4+6=22) amounting 220
3 small pizza, two medium pizza (size 3*4+2*6=24) amounting 240
...
1 large pizza and 1 medium pizza (size 1*6+1*12=18) amounting 160

And this is the optimal money. No other arrangements can lead to a more optimal solution for this problem( that means we can't minimize the money anymore).

这是最理想的钱。 没有其他安排可以为这个问题找到更理想的解决方案(这意味着我们不能再把金钱减少到最低限度了)。

So, how we can solve the above problem?

那么,如何解决以上问题呢?

To understand the problem, we can figure out that it's quite similar to the knapsack problem with constraints that we have an infinite supply of the pizzas and the number of different kinds of pizzas is three. We need to achieve the total size of pizza while investing the minimum amount of money.

为了理解这个问题,我们可以发现它与背包问题非常相似,但有一个局限性,就是我们有无限量的比萨饼,而不同种类的比萨饼的数量是3。 我们需要在投资最小金额的同时实现比萨的总大小。

So, let,

所以让,

    Total area of pizza needed (at least) = X
Area of small sized pizza: S
Area of medium sized pizza: M
Area of large sized pizza: L
Cost of small sized pizza: CS
Cost of medium sized pizza: CM
Cost of large sized pizza: CL

Now,

现在,

    f(X) = minimum amount of money to get at least X area of pizza

So, f(X) can be written recursively as,

因此, f(X)可以递归地写为

    f(X) = minimum(f(X-S) + CS, f(X-M) + CM, f(X-L) + CL 

Where,

哪里,

    X-S >= 0, X-m >= 0, X-L >= 0

That means, we choose either of small, medium or large pizza whichever is feasible leading to minimum money for any sub-problem

就是说,我们选择小,中或大披萨,只要可行,就可以使任何子问题的支出降至最低

Since the recursion tree would generate many overlapping subproblems we need to convert it into DP.

由于递归树会生成许多重叠的子问题,因此我们需要将其转换为DP。

Solution Approach:

解决方法:

Converting the recursion into DP:

将递归转换为DP:

    1)  Declare arr[X+1] and initialize arr[0]=0 which is result for X=0;
2)  for  i=1 to X  //for each size of pizza
// if a small pizza cut is possible then dps=i-S else 0
Set dps=(i-S)≤0?0:(i-S) 
// if a medium pizza cut is possible then dpm=i-M else 0
Set dpm=(i-M)<=0?0:(i-M) 
// if a large pizza cut is possible then dpm=i-L else 0
Set dpl=(i-L)<=0?0:(i-L) 
// find the minimum for this sub-problem
arr[i]=min(arr[dps]+CS,arr[dpm]+CM,arr[dpl]+CL) 
end for
3) Return arr[X] which is final result.

C++ Implementation:

C ++实现:

#include <bits/stdc++.h>
using namespace std;
int min(int x, int y, int z)
{
if (x <= y && x <= z)
return x;
if (y <= z)
return y;
return z;
}
void minimumMoney(int X, int S, int M, int L, int CS, int CM, int CL)
{
int arr[X + 1];
arr[0] = 0;
for (int i = 1; i <= X; i++) {
//check for valid pizza part
int dps = (i - S) <= 0 ? 0 : (i - S);
//check for valid pizza part
int dpm = (i - M) <= 0 ? 0 : (i - M);
//check for valid pizza part
int dpl = (i - L) <= 0 ? 0 : (i - L);
//find the minimum
arr[i] = min(arr[dps] + CS, arr[dpm] + CM, arr[dpl] + CL);
}
cout << "Minimum amount of money: " << arr[X] << endl;
}
int main()
{
int X, S, M, L, CS, CM, CL;
cout << "Enter X, total size(at least)\n";
cin >> X;
cout << "Enter S, small pizza size\n";
cin >> S;
cout << "Enter M, medium pizza size\n";
cin >> M;
cout << "Enter L, large pizza size\n";
cin >> L;
cout << "Enter CS,cost of small pizza \n";
cin >> CS;
cout << "Enter CM,cost of medium pizza \n";
cin >> CM;
cout << "Enter CL,cost of large pizza \n";
cin >> CL;
minimumMoney(X, S, M, L, CS, CM, CL);
return 0;
}

Output

输出量

RUN 1:
Enter X, total size(at least)
17
Enter S, small pizza size
4
Enter M, medium pizza size
6
Enter L, large pizza size
12
Enter CS,cost of small pizza 
40
Enter CM,cost of medium pizza 
60
Enter CL,cost of large pizza 
100
Minimum amount of money: 160
RUN 2:
Enter X, total size(at least)
17
Enter S, small pizza size
3
Enter M, medium pizza size
6
Enter L, large pizza size
12
Enter CS,cost of small pizza 
50
Enter CM,cost of medium pizza 
60
Enter CL,cost of large pizza 
100
Minimum amount of money: 160

翻译自: https://www.includehelp.com/icp/pizza-mania-problem.aspx

分披萨问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 10g学习之分组函数

一、 &#xff08;1&#xff09;分组查询语句的顺序 select ... from ... where ... group by ... having ... order by ... 注意&#xff1a; where-->group by分组-->执行组函数-->having筛选->order by 如果select/having语句后面出现了组函数 那么se…

0.1uf与47uf并联_UF是什么形式?

0.1uf与47uf并联UF&#xff1a;超滤 (UF: Ultrafiltration) UF is an abbreviation of Ultrafiltration. It is a kind of membrane filtration which is used in UF water purifiers. Through a hollow fiber threaded semi-permeable membrane, the water is made to proceed…

机器学习相关——协同过滤

在现今的推荐技术和算法中&#xff0c;最被大家广泛认可和采用的就是基于协同过滤的推荐方法。本文将带你深入了解协同过滤的秘密。下面直接进入正题 1 什么是协同过滤 协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称 CF)&#x…

二维的完整形式是什么?

2D&#xff1a;二维 (2D: Two Dimensional) 2D is an abbreviation of "Two-Dimensional". 2D是“二维”的缩写 。 It is the dimension of any virtual object that has no manifestation of profundity. For example, if a graphic or picture representation of …

InfoQ中文站2015年度优秀社区编辑评选揭晓

\又到了年终岁末&#xff0c;在过去的一年里&#xff0c;InfoQ网站的月独立UV接近130万&#xff0c;月PV突破200万&#xff0c;每周独立访问用户接近30万&#xff0c;网站访问量过万的文章超过60篇。每月活跃的数十位社区编辑为InfoQ的内容生产贡献着力量。正是这点点汇聚的星光…

wfm扩展_WFM的完整形式是什么?

wfm扩展WFM&#xff1a;为我工作 (WFM: Works For Me) WFM is an abbreviation of "Works For Me". WFM是“ Works For Me”的缩写 。 It is an expression, which is commonly used in messaging or chatting on social media networking sites like Facebook, Yah…

【设计模式】—— 访问者模式Visitor

对于某个对象或者一组对象&#xff0c;不同的访问者&#xff0c;产生的结果不同&#xff0c;执行操作也不同。此时&#xff0c;就是访问者模式的典型应用了。 应用场景 1 不同的子类&#xff0c;依赖于不同的其他对象 2 需要对一组对象&#xff0c;进行许多不相关的操作&#x…

ruby宝石区块链最新消息_Ruby宝石| Ruby工具

ruby宝石区块链最新消息Ruby宝石 (Ruby Gems) Every language has its package manager which helps it by providing libraries and a standard format to distribute Ruby program. It is a type of tool which is developed to easily facilitate the installation of Gems.…

CMake入门(二)

CMake入门&#xff08;二&#xff09; 最后更新日期&#xff1a;2014-04-25 by kagula 阅读前提&#xff1a;《CMake入门&#xff08;一&#xff09;》、Linux的基本操作 环境: Windows 8.1 64bit英文版。Visual Studio 203 Update1英文版。CMake 2.8.12.2、 Cent OS 6.5。内容…

Scala中的评论

Scala评论 (Scala comments) Comments are things that are readable by the programmer. They are added to the code to add an explanation about the source code. Commenting on a program to make it easier to understand by the programmer. 注释是程序员可以读取的东西…

最小生成树prim (c++ 已大改)

2019独角兽企业重金招聘Python工程师标准>>> #include <iostream> #include <vector> #include <set> #include <map> #include <initializer_list> #include <memory> template<typename T> class Graph{private:std::m…

assoc_Ruby assoc()函数

assocRuby中的assoc()函数 (assoc() function in Ruby) We have studied functions to process single dimensional array so far but if we talk about assoc() function, it does not work for single dimensional arrays. assoc() function only works on Array of Arrays o…

前端接入HTTP协议浅析

【摘要】&#xff1a;本文整理并简要分析了HTTP协议的交互过程和内容格式&#xff0c;包括HTTP请求、HTTP应答的头域和实体内容&#xff0c;HTTP 1.0与HTTP 1.1的差异&#xff0c;并举例说明了Chunked编码的工作过程原理。1、HTTP协议简介浏览器和Web服务器之间一问一答的交互过…

互联网传真 传真指令_传真的完整形式是什么?

互联网传真 传真指令传真&#xff1a;传真 (FAX: Facsimile) FAX is an abbreviation of "Facsimile". 传真是“传真”的缩写 。 It is commonly written and spoken as FAX. It is a telephonic transmission of a scanned copy of text and images printed on a p…

C#使用七牛云存储上传下载文件、自定义回调

项目需要将音视频文件上传服务器&#xff0c;考虑并发要求高&#xff0c;通过七牛来实现。 做了一个简易的压力测试&#xff0c;同时上传多个文件&#xff0c;七牛自己应该有队列处理并发请求&#xff0c;我无论同时提交多少个文件&#xff0c;七牛是批量一个个排队处理了。 一…

netfilter que_QUE的完整形式是什么?

netfilter que问题&#xff1a;问题 (QUE: Questions) QUE is an abbreviation of "Questions". QUE是“ Questions”的缩写 。 It is an expression, which is commonly used in the Gmail platform. It is written in the body or the subject of the email to te…

mysqld_multi stop 不能停掉mysql

使用mysqld_multi start 启动了多个mysql&#xff0c;但是mysqld_multi stop 却不能停止原因&#xff1a;因为你还没有授权/usr/local/mysql/bin/mysqld_multi stop 但是默认是停不掉的&#xff0c;需要我们做一个授权grant shutdown on *.* to usernamelocalhost identified…

热冗余冷冗余_冗余支架

热冗余冷冗余Problem statement: 问题陈述&#xff1a; Given a string of balanced expression, find if it contains a redundant parenthesis or not. A set of parentheses is redundant if the same sub-expression is surrounded by unnecessary or multiple brackets. …

对称树

Problem statement: 问题陈述&#xff1a; Given a binary Tree, check whether the tree is symmetric or not. 给定二叉树 &#xff0c; 检查树是否对称 。 Input Example: 输入示例&#xff1a; For example1/ \2 2/ \ / \3 4 4 3The above tree is symmetric1/ \2 …

unity, undo

如果在操作一个Object之前调用Undo.RecordObject(Object)&#xff0c;且操作确实造成Object某些属性的改变&#xff0c;则会产生一个undo记录。 如果我们的架构不是直接操作Object&#xff0c;而是操作一个ui&#xff0c;并在某些时机通过ui.save(Object)将数据回写到Object&am…