20-最大k乘积问题
/*
最大k乘积问题
题目内容:
设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数.这k个整数的乘积称为I的一个k乘积.试设计一个算法,对于给定的I和k ,求出I的最大k乘积.
Input
输入的第1行中有2个正整数n和k.正整数n是序列的长度;正整数k是分割的段数.接下来的一行中是一个n位十进制整数.(n<=10)
Output
输出计算结果,第1行中的数是计算出的最大k乘积.
n位十进制整数.(n<=10)
输入描述
输入的第1行中有2个正整数n和k.正整数n是序列的长度;正整数k是分割的段数.接下来的一行中是一个
输出描述
输出计算结果,第1行中的数是计算出的最大k乘积.
输入样例
2 1
15
输出样例
15
*/
//思路: 构造dp[i][k]表示从1到i位数分成k段的最大值,m[i][j]表示一个整数的第i位到j位构成的整数。
//递推关系: dp[i][k] = max(dp[i][k], dp[j][k - 1] * m[j+1][i], 1<=j<i; j表示分割的位置,枚举j,可以求得最大dp[i][k]
1.递归
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int dp[15][15];
int m[15][15];
int fun(int i, int k){ //递归求解,表示返回从1到i位数分成k份相乘的最大数
if(k == 1)
return dp[i][k] = m[1][i];
if(dp[i][k] != 0)
return dp[i][k];
for(int j = 1; j < i; j++){
dp[i][k] = max(dp[i][k], fun(j, k - 1) * m[j + 1][i]);
}
return dp[i][k];
}
int main(){
int n, k, s;
while(~scanf("%d%d", &n, &k)){
memset(m, 0, sizeof(m));
memset(dp, 0, sizeof(dp));
scanf("%d", &s);
int S = 1;
for(int i = 1; i <= n; i++)
S *= 10;
//初始话m数组,将s的i到j位数存在里面
for(int i = 1; i <= n; i++){
m[i][n] = s % S;
S /= 10;
for(int j = n - 1; j >= i; j--){
m[i][j] = m[i][j + 1] / 10;
// cout << m[i][j] << " ";
}
// cout << endl;
}
cout << fun(n, k);
}
return 0;
}
2.递推:
#include <iostream>
using namespace std;
int dp[100][100];
int m[100][100];
int main(){
int n, k, a;
cin >> n >> k >> a;
if(k == 1){
cout << a;
return 1;
}
int b = 1, q = 1;
for(int i = n; i >= 1; i--){
int p = 10;
b = a / q;
q *= 10;
// cout << b << endl;
for(int j = i; j >= 1; j--){
m[j][i] = b % p;
p *= 10;
// cout << m[j][i] << " ";
}
}
// dp[1][1] = a;
for(int i = 1; i <= n; i++){ //枚举前n个数字
for(int j = 0; j <= i; j++){ //枚举乘号的个数
if(j == 0){
dp[i][j] = m[1][i];
continue;
}
for(int n = 1; n <= i; n++)//枚举乘号的位置
dp[i][j] = max(dp[i][j], dp[n][j-1]*m[k+1][i]);
}
}
cout << dp[n][k];
return 0;
}
20-最大k乘积问题的更多相关文章
- 最大k乘积问题
68.最大k乘积问题 (15分)C时间限制:3000 毫秒 | C内存限制:3000 Kb题目内容:设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数.这k个整数的乘积称为I的一个k乘积. ...
- 最大 k 乘积问题 ( 经典区间DP )
题意 : 设 NUM 是一个 n 位十进制整数.如果将 NUM 划分为 k 段,则可得到 k 个整数.这 k 个整数的乘积称为 NUM 的一个 k 乘积.试设计一个算法,对于给定的 NUM 和 k,求 ...
- 68.最大k乘积问题 (15分)
C时间限制:3000 毫秒 | C内存限制:3000 Kb题目内容:设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数.这k个整数的乘积称为I的一个k乘积.试设计一个算法,对于给定的I和 ...
- 【题解】K乘积
题目描述 有N个数,每个数的范围是[-50,50],现在你要从这N个数中选出K个,使得这K个数的乘积最大. 输入格式 第一行,N和K. 1 <= N <= 50. 1 <= K & ...
- dp之区间:最大k乘积
题目:给你一个n(1<=n<=15)位数,求将它分成m段,用m-1个*连接起来的最大乘积....... 思路:定义dp[i][j]为将前i位数分成j段的最大乘积,那么dp[i][j]==m ...
- 最大k乘积
思路:看到这道题,第一思路就要是动态规划,不要想着用啥暴力或者排列组合,只会搞得很复杂. 动态规划的思路是对这个整数,我们从后向前进行划分k个数字,我们知道对于划分后的最后一个整数,它的位数要保证前面 ...
- 轻量级移动端类库,大小20多k,支持多指触摸。
/* * 移动端 公共类库 * 作者:hqs */ (function(global, factory) { // cmd commonjs if (typeof module === "o ...
- Java实现k个数乘(cheng)(自然数的k乘积问题)
k个数乘(cheng) 题目描述 桐桐想把一个自然数N分解成K个大于l的自然数相乘的形式,要求这K个数按从小到大排列,而且除了第K个数之外,前面(K-l)个数是N分解出来的最小自然数.例如:N=24, ...
- Python交互K线工具 K线核心功能+指标切换
Python交互K线工具 K线核心功能+指标切换 aiqtt团队量化研究,用vn.py回测和研究策略.基于vnpy开源代码,刚开始接触pyqt,开发界面还是很痛苦,找了很多案例参考,但并不能完全满足我 ...
随机推荐
- 微信jssdk批量添加卡券接口
1)首先是官方接口文档: 1.批量添加卡券接口:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.0861973 ...
- 第3章 文件I/O(1)_标准C的I/O
1. 标准C的I/O和FILE结构体 1.1 标准C的I/O库函数 (1)char *fgets( char *string, int n, FILE *stream );//从流中获取字符串 (2) ...
- C#中char空值的几种表示方式
C#中char空值的几种表示方式 在C#中char类型的表示方式通常是用单引号作为分隔符,而字符串是用双引号作为分隔符. 例如: 程序代码 程序代码 char a = 'a'; char b = 'b ...
- 香侬科技独家对话Facebook人工智能研究院首席科学家Devi Parikh
Facebook 人工智能研究院(FAIR)首席科学家 Devi Parikh 是 2017 年 IJCAI 计算机和思想奖获得者(IJCAI 两个最重要的奖项之一,被誉为国际人工智能领域的「菲尔兹奖 ...
- 类继承-super, 私有变量
多继承 class A: def ces(self): print('a-ces') class B(A): def ces(self): print('b-ces') class C(A): def ...
- 64位win10系统无法安装.Net framework3.5的两种解决方法
参考网站: https://blog.csdn.net/zang141588761/article/details/52177290 在Windows10中,当我们安装某些软件的时候会提示“你的电脑上 ...
- 【RabbitMQ】ubuntu下RabbitMQ安装与简单使用
参考:https://blog.csdn.net/the_fool_/article/details/80570971 1.安装: https://blog.csdn.net/a295277302/a ...
- JAVA Spring 事物 ( 已转账为例 ) 基于 XML 配置,事务类型说明
< 1 > 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...
- 吴裕雄 python神经网络 水果图片识别(1)
import osimport numpy as npimport matplotlib.pyplot as pltfrom skimage import color,data,transform,i ...
- UnicodeEncodeError: ‘ascii’ codec can’t encode
[UnicodeEncodeError: ‘ascii’ codec can’t encode] Python默认环境编码通过下面的方法可以获取: 基本上是ascii编码方式,由此Python自然调用 ...