Add the section of max product cutting problem. (#642)

This commit is contained in:
Yudong Jin
2023-07-21 21:56:14 +08:00
committed by GitHub
parent ca5bde2b6c
commit 075c3abf88
10 changed files with 263 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
/**
* File: max_product_cutting.cpp
* Created Time: 2023-07-21
* Author: Krahets (krahets@163.com)
*/
#include "../utils/common.hpp"
/* 最大切分乘积:贪心 */
int maxProductCutting(int n) {
// 当 n <= 3 时,必须切分出一个 1
if (n <= 3) {
return 1 * (n - 1);
}
// 贪心地切分出 3 a 为 3 的个数b 为余数
int a = n / 3;
int b = n % 3;
if (b == 1) {
// 当余数为 1 时,将一对 1 * 3 转化为 2 * 2
return (int)pow(3, a - 1) * 2 * 2;
}
if (b == 2) {
// 当余数为 2 时,不做处理
return (int)pow(3, a) * 2;
}
// 当余数为 0 时,不做处理
return (int)pow(3, a);
}
/* Driver Code */
int main() {
int n = 58;
// 贪心算法
int res = maxProductCutting(n);
cout << "最大切分乘积为" << res << endl;
return 0;
}

View File

@@ -0,0 +1,40 @@
/**
* File: max_product_cutting.java
* Created Time: 2023-07-21
* Author: Krahets (krahets@163.com)
*/
package chapter_greedy;
import java.lang.Math;
public class max_product_cutting {
/* 最大切分乘积:贪心 */
public static int maxProductCutting(int n) {
// 当 n <= 3 时,必须切分出一个 1
if (n <= 3) {
return 1 * (n - 1);
}
// 贪心地切分出 3 a 为 3 的个数b 为余数
int a = n / 3;
int b = n % 3;
if (b == 1) {
// 当余数为 1 时,将一对 1 * 3 转化为 2 * 2
return (int) Math.pow(3, a - 1) * 2 * 2;
}
if (b == 2) {
// 当余数为 2 时,不做处理
return (int) Math.pow(3, a) * 2;
}
// 当余数为 0 时,不做处理
return (int) Math.pow(3, a);
}
public static void main(String[] args) {
int n = 58;
// 贪心算法
int res = maxProductCutting(n);
System.out.println("最大切分乘积为" + res);
}
}

View File

@@ -0,0 +1,33 @@
"""
File: max_product_cutting.py
Created Time: 2023-07-21
Author: Krahets (krahets@163.com)
"""
import math
def max_product_cutting(n: int) -> int:
"""最大切分乘积:贪心"""
# 当 n <= 3 时,必须切分出一个 1
if n <= 3:
return 1 * (n - 1)
# 贪心地切分出 3 a 为 3 的个数b 为余数
a, b = n // 3, n % 3
if b == 1:
# 当余数为 1 时,将一对 1 * 3 转化为 2 * 2
return int(math.pow(3, a - 1)) * 2 * 2
if b == 2:
# 当余数为 2 时,不做处理
return int(math.pow(3, a)) * 2
# 当余数为 0 时,不做处理
return int(math.pow(3, a))
"""Driver Code"""
if __name__ == "__main__":
n = 58
# 贪心算法
res = max_product_cutting(n)
print(f"最大切分乘积为 {res}")