标签:scanner int System 问题 String out 最大 乘积
最大k乘积问题
问题描述:设X是一个n位十进制整数,如果将X划分为K段,则可得到K个整数,这K个整数的乘积称为X的一个K乘积。请设计算法并编程实现,对于给定的X 和K,求出X的最大K乘积。
输入:X,K,n
输出:X的最大K乘积。
分析 : 设f(s,t)是X从第s位开始的t位数字组成的十进制数,t(i,j)表示前 i 位数分成 j 段的最大乘积
状态转移方程为: t(i,j) = max{ t(k,j-1) * f(k,i-k) } (1<=k<i)
```java
public class Homework {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入(n,K,X) : ");
int n = scanner.nextInt();
int k = scanner.nextInt();
String x = scanner.next();
int[][] m = new int[n + 1][n + 1];
//前1~n位分成 1 段先记录下来
for (int i = 1; i <= n; i++) {
m[i][1] = f(0, i, x);
}
int temp;
//动态规划
for (int j = 2; j <= k; j++) {
for (int i = j; i <= n; i++) {
//找到前i位分成j段的最大乘积
for (int z = 1; z <= i; z++) {
temp = m[z][j - 1] * f(z + 1, n + 1, x);
if (temp > m[i][j]) {
m[i][j] = temp;
}
}
}
}
System.out.print("输出(X的最大K乘积):");
System.out.println(m[n][k]);
}
static int f(int a, int b, String s) {
//a>b的情况是不存在的故返回0
if (a > b) {
return 0;
}
return Integer.parseInt(s.substring(a, b).trim());
}
}
一开始做的时候不太会,找的文章写的也不细,我原本想写详细一点,但是发现写分析真的很累,将就看吧,hhh
标签:scanner,int,System,问题,String,out,最大,乘积 来源: https://blog.csdn.net/Eric_xkk/article/details/120606101
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。