C时间限制:3000 毫秒 |  C内存限制:3000 Kb
题目内容:
设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*/

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int n,m;
string s;
int a[15];
int dp[15][15];
int cal(int s,int e){
    int ans = a[s];
    for(int i=s+1;i<=e;i++){
        ans=ans*10+a[i];
    }
    return ans;
}
int main(){
    cin>>n>>m;
    cin>>s;
    memset(a,0,sizeof(a));
    for(int i=1;i<=n;i++){
        a[i] = s[i-1]-'0';
    }
    for(int i=1;i<=n;i++){
        dp[i][1] = cal(1,i);
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(i==j)
                dp[i][j] = dp[i-1][j-1]*cal(i,i);
            else if(i<j)
                dp[i][j] = 0;
            else{//i>j
                if(j!=1)
                    dp[i][j]=0;
                for(int kk=1;kk<i;kk++){
                    if(kk<j-1)
                        dp[kk][j-1] = 0;
                    dp[i][j]=max(dp[kk][j-1]*cal(kk+1,j),dp[i][j]);//将分为j段的问题化简为分为j-1段,大问题化为小问题
                }
            }    
        }
    }
    cout<<dp[n][m]<<endl;
    return 0;
}

思路:

cal(i,j)记录的是一串数字从第i位到第j位的数,

举例:1234

cal(2,3) 就是23  cal(2,4)就是234

列表

j\i 1 2 3 4
1 1 12 123 1234
2 0 2 36 492
3 0 0 6 144
4 0 0 0 24

再注意一下细节问题

68.最大k乘积问题 (15分)的更多相关文章

  1. 最大k乘积问题

    68.最大k乘积问题 (15分)C时间限制:3000 毫秒 | C内存限制:3000 Kb题目内容:设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数.这k个整数的乘积称为I的一个k乘积. ...

  2. 7-8 矩阵A乘以B (15分)

    7-8 矩阵A乘以B (15分)   给定两个矩阵A和B,要求你计算它们的乘积矩阵AB.需要注意的是,只有规模匹配的矩阵才可以相乘.即若A有R​a​​行.C​a​​列,B有R​b​​行.C​b​​列, ...

  3. PAT 乙级 1091 N-自守数 (15 分)

    1091 N-自守数 (15 分) 如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3×92​2​​=25392,而 25392 的末尾两位正好是 ...

  4. PAT 乙级 1086 就不告诉你 (15 分)

    1086 就不告诉你 (15 分) 做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三.”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积. 输入格式 ...

  5. PTA 7-3 jmu-ds-单链表的基本运算(15 分)

    jmu-ds-单链表的基本运算(15 分) 实现单链表的基本运算:初始化.插入.删除.求表的长度.判空.释放.(1)初始化单链表L,输出L->next的值:(2)依次采用尾插法插入元素:输入分两 ...

  6. PAT 乙级 1071 小赌怡情(15 分)

    1071 小赌怡情(15 分) 常言道“小赌怡情”.这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注 t 个筹码后,计算机给出第二个数.若玩 ...

  7. 20-最大k乘积问题

    /*                                             最大k乘积问题        题目内容: 设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数. ...

  8. B1091 N-自守数 (15分)

    B1091 N-自守数 (15分) 如果某个数 \(K\)的平方乘以\(N\) 以后,结果的末尾几位数等于 \(K\),那么就称这个数为"\(N\)-自守数".例如 \(3×92 ...

  9. B1086 就不告诉你 (15分)

    B1086 就不告诉你 (15分) 做作业的时候,邻座的小盆友问你:"五乘以七等于多少?"你应该不失礼貌地围笑着告诉他:"五十三."本题就要求你,对任何一对给定 ...

随机推荐

  1. Zabbix当内存剩余不足10%的时候触发报警

    zabbix默认的剩余内存报警: Average Lack of available memory on server {HOST.NAME}{Template OS Linux:vm.memory. ...

  2. grafana初体验

    1.centos版下载安装 wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.0.4-1.x86_6 ...

  3. ELK日志分析平台.1-搭建

    ELK日志分析平台.1-搭建 2017-12-28 | admin 一.简介1.核心组成    ELK由Elasticsearch.Logstash和Kibana三部分组件组成:    Elastic ...

  4. java性能调优03

    1.java中的四种引用类型(级别由高到低为:强引用,软引用,弱引用和虚引用) 1.1 强引用:默认创建的变量都是强引用,垃圾回收机制不会将其回收,当内存空 间不足,Java虚拟机宁愿抛出OutOfM ...

  5. React 16.4 生命周期

    补一下 React 16.4版本的生命周期图

  6. python图像特征提取

    这里使用的是python 3.5 .opencv_python-3.4.0+contrib,特征提取的代码如下: import cv2 img = cv2.imread("feature.j ...

  7. 微信小程序の模板

    一.什么是模板 模板顾名思义就是可以复用的代码块.减少编码工作量. 二.例子 <template name="templateTest"> <view>th ...

  8. shell 编程四剑客简介 find sed grep awk(微信公众号摘抄)

    一,Shell编程四剑客之Find 通过如上基础语法的学习,读者对Shell编程有了更近一步的理解,Shell编程不再是简单命令的堆积,而是演变成了各种特殊的语句.各种语法.编程工具.各种命令的集合. ...

  9. createReadStream().pipe() Callback

    const stream = fs.createReadStream('<filepath>/example.pdf', {bufferSize: 64 * 1024}) stream.p ...

  10. SQL关于:警告: 聚合或其他 SET 操作消除了空值。

    方法一: create table tb ( id int, num int ) insert into tb select 1,10 insert into tb select 1,20 inser ...