最佳加法表达式(DP)

简介: 题目:有一个由1..9组成的数字串.问如果将m个加号插入到这个数字串中,在各种可能形成的表达式中,值最小的那个表达式的值是多少思路: 添加完加号后,表达式的最后一个加号在第i个数字后面,那么整个表达式的最小值,则等于前i个数的m-1最佳加法表达式,加上i+1到n组成的数。

题目:有一个由1..9组成的数字串.问如果将m个加号插入到这个数字串中,在各种可能形成的表达式中,值最小的那个表达式的值是多少

思路:
添加完加号后,表达式的最后一个加号在第i个数字后面,那么整个表达式的最小值,则等于前i个数的m-1最佳加法表达式,加上i+1到n组成的数。//V(i,m-1)+num[i+1][n]

V(n,m)表示在n个数字中插入m个加号所能形成的表达式的最小值。

num[i][j]表示从第i个数到第j个数字所组成的数 

           Num[1][n];  n个数字构成的整数 //当m = 0
V(n,m) =  INF  //当m+1 > n
           Min{V(i,m-1) + Num(n, i+1)} (i = m ... n-1) //else

#include<iostream>  
#include<algorithm>
using namespace std;
const int INF = 0x3f3f3f;
int sz[1000]; 
int num[1000][1000];
int n,m;
int V(int n, int m) {
    if (m == 0) {
        return num[1][n];
    } else if (m+1 > n) {
        return INF; 
    } else { //m < n
        int ans = INF;
        for (int i = m; i <= n-1; i++) //最后一个数字后不放+号 
            ans = min(ans, V(i,m-1)+num[i+1][n]);

        return ans;
    }
}
int main() {
    while (cin >> n >> m) {
        for (int i = 1; i <= n; i++) 
            cin >> sz[i];

        //预处理,num[i][j]表示从第i个数到第j个数字所组成的数   
        for(int i = 1; i <= n; i++) {
            num[i][i] = sz[i];
            for (int j = i+1; j <= n; j++) {
                num[i][j] = num[i][j-1]*10 + sz[j];
            }           
        }
        cout << V(n,m) << endl; 
    }
    return 0;
}
目录
相关文章
|
7月前
|
人工智能 分布式计算 监控
AgentSociety:告别纸上谈兵!AI社会模拟器预判政策漏洞:输入新规秒看30年后社会形态
AgentSociety 是清华大学推出的基于大语言模型的社会模拟器,通过构建类人心智的智能体模拟复杂社会行为,适用于政策沙盒测试、危机预警等场景。
311 6
|
机器学习/深度学习 存储 并行计算
C语言与机器学习:K-近邻算法实现
C语言与机器学习:K-近邻算法实现
|
7月前
|
机器学习/深度学习 算法 量子技术
《深度揭秘:拉普拉斯平滑在朴素贝叶斯算法中的关键作用与参数选择之道》
朴素贝叶斯算法在文本分类、情感分析等领域广泛应用,但常遇零概率问题,即某些特征从未与特定类别同时出现,导致条件概率为零,影响模型准确性。拉普拉斯平滑通过在计数上加一小正数(如α=1),避免了零概率问题,提升了模型的稳定性和泛化能力。选择合适的平滑参数α至关重要:经验法则通常设α=1;交叉验证可找到最优α值;根据数据规模和特征分布调整α也能有效提升模型性能。
304 19
|
IDE 测试技术 开发工具
NumPy 代码调试与错误处理
【8月更文第30天】NumPy 是 Python 中用于科学计算的核心库之一,提供了高性能的多维数组对象和大量的数学函数。尽管 NumPy 提供了许多方便的功能,但在实际编程过程中难免会遇到各种各样的问题。本文将介绍一些调试 NumPy 代码的技巧,并讨论如何处理常见的错误。
737 2
|
机器学习/深度学习 人工智能 算法
【语音识别算法】深度学习语音识别算法与传统语音识别算法的区别、对比及联系
深度学习语音识别算法与传统语音识别算法在理论基础、实现方式、性能表现等方面存在显著区别,同时也有一些联系。下面将从几个方面详细比较这两种方法,并给出应用实例和代码示例
420 4
|
移动开发 前端开发 架构师
前端架构师需要具备什么能力以及代码能力?
【7月更文挑战第17天】 前端架构师是技术、领导与管理的融合,需精通HTML/CSS/JS及React/Vue等框架,擅长工程化、跨平台开发与安全。他们设计高效架构,优化性能,领导团队,做技术选型,并持续学习分享,确保代码质量和团队成长。
540 7
|
监控 算法 Java
深入探索Java虚拟机:性能监控与调优实践
在面对日益复杂的企业级应用时,Java虚拟机(JVM)的性能监控和调优显得尤为重要。本文将深入探讨JVM的内部机制,分析常见的性能瓶颈,并提供一系列针对性的调优策略。通过实际案例分析,我们将展示如何运用现代工具对JVM进行监控、诊断及优化,以提升Java应用的性能和稳定性。
|
机器学习/深度学习 存储 缓存
基于Elasticsearch的聊天机器人开发指南
【8月更文第28天】聊天机器人是一种越来越流行的交互式工具,它们能够模拟人类对话,帮助用户获取信息或完成特定任务。结合Elasticsearch的强大搜索能力和机器学习技术,可以构建出具有高度智能化的聊天机器人。本文将详细介绍如何使用Elasticsearch以及相关的人工智能技术来开发一个智能聊天机器人,并提供一些具体的代码示例。
264 0
|
SQL Java 关系型数据库
IDEA+Java+JSP+Mysql+Tomcat实现Web商品信息管理系统
IDEA+Java+JSP+Mysql+Tomcat实现Web商品信息管理系统
749 0
IDEA+Java+JSP+Mysql+Tomcat实现Web商品信息管理系统