当前位置: 首页 > 编程笔记 >

将数字分解成3部分即可找到最大和

张星洲
2023-03-14
本文向大家介绍将数字分解成3部分即可找到最大和,包括了将数字分解成3部分即可找到最大和的使用技巧和注意事项,需要的朋友参考一下

给出一个数字。我们的任务是将数字三倍地除以n / 2,n / 3和n / 4,然后将数字分为三部分来求出最大和。

例如,可以将50分为{25,16,12},现在将集合{25,16,12}中的每一个再次分成三部分,依此类推。完成除法多达3次后,我们将计算总和以找到最大的乘积。

可以以递归的方式解决该程序,但是在递归的方法中,我们需要多次查找相同的结果,因此,如果使用动态编程方法并将先前计算的数据存储在表中,则它将减少时间。

输入输出

Input:
Let the given number is 12.
Output:
The answer is 13.
At first divide the 12 as (12/2 + 12/3 + 12/4) = 6 + 4 + 3 = 13.
now divide 6 into three parts (6/2 + 6/3 + 6/4) = 3 + 2 + 1 = 6.
If we divide the 4 and 3, we can get maximum 4 from them. From all values the maximum is 13.

算法

maxBreakSum(n)

输入: 给定的数字。

输出:分解后的最大和。

Begin
   define sums array of size n+1
   sums[0] := 0, sums[1] := 1

   for i in range 2 to n, do
      sum[i] := maximum of i and (sums[i/2] + sums[i/3] + sums[i/d])
   done
   return sums[n]
End

示例

#include<iostream>
#define MAX 1000000
using namespace std;

int max(int a, int b) {
   return (a>b)?a:b;
}

int maxBreakSum(int n) {
   int sumArr[n+1];
   sumArr[0] = 0, sumArr[1] = 1;    //for number 0 and 1, the maximum sum is 0 and 1 respectively

   for (int i=2; i<=n; i++)    //for number 2 to n find the sum list
      sumArr[i] = max(sumArr[i/2] + sumArr[i/3] + sumArr[i/4], i);    //divide number by 2, 3, 4
   return sumArr[n];
}

int main() {
   int n;
   cout << "Enter a number: "; cin >> n;
   cout << "Maximum sum after breaking: " << maxBreakSum(n);
}

输出结果

Enter a number: 12
Maximum sum after breaking: 13
 类似资料:
  • 问题内容: 如果不使用数组,我可以得到最大的数组,但是无法获得最小的数组。 最小的代码。 问题答案:

  • 问题内容: 是否存在将数字分割成两个部分(即整数部分和小数部分)的有效方法? 问题答案: 用途:

  • 本文向大家介绍C ++中字母构成的最大分数词,包括了C ++中字母构成的最大分数词的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个单词列表,一个字母列表和每个字符的分数。我们必须找到使用给定字母组成的任何有效单词集的最大分数。 我们可能不会在字母中使用所有字符,并且每个字母只能使用一次。字母“ a”,“ b”,“ c”,...,“ z”的得分分别由得分[0],得分[1],...,得分[25

  • 尝试将多部分功能用于我的泽西岛 3 Web 应用程序。不幸的是,似乎没有找到注射源... pom.xml web.xml endpoint 我一直在看其他帖子,在我看来,我有正确的依赖项,我还在我的web.xml.中注册了Multipart-Feature,我错过了什么? 感谢您的任何意见!

  • 问题内容: 我有以下数据按player_id和match_date排序。我想找出连续运行次数最多的记录组(从2014-04-03到2014-04-12连续3次运行4次) 我想出了以下SQL: 但这 延续 了之前连续运行的排名(由于玩家1已经出现3次,因此在2014-04-19进行的4次针对Player 1的排名预计为1,但排名为4)。同样,在2014-04-19上,玩家2的23奔跑有望获得等级1,

  • 问题内容: 我有一个字符串,我想分成N个相等的部分。 例如,假设我有一个长度为128的字符串,我想将其分成4个长度为32的块;也就是说,第一个32个字符,然后第二个32个字符,依此类推。 我怎样才能做到这一点? 问题答案: import textwrap print textwrap.wrap(“123456789”, 2) #prints [‘12’, ‘34’, ‘56’, ‘78’, ‘9’

  • 问题内容: 我正在制作一种方法来读取整个类代码并对其进行一些处理。 我想要做的是获取方法的名称,并使用它创建一个字符串。 像removeProduct这样的东西 我将创建一个字符串“删除产品” 在大写情况下如何拆分名称方法?如何用每个单词的第一个字母作为大写字母来构建这个新字符串?我正在使用子字符串,是否有更简便更好的方法呢? ps:我确定我的巴西英语对标题没有帮助。如果有人能让它看起来更好,我将

  • 本文向大家介绍找到将数字分为四部分的方法数量,以使C ++中的a = c和b = d,包括了找到将数字分为四部分的方法数量,以使C ++中的a = c和b = d的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个数字n。我们必须找到多种方法将数字分为几部分(a,b,c和d),使得a = c,b = d。因此,如果数字为20,则输出将为4。如[1、1、9、9],[2、2、8、8],[3、3、7