动态规划 简单的分割问题的解决方案钢棒

代码第一版 :

#include <iostream>
using namespace std;

int max(int a,int b)
{
    if(a>=b)return a;
    else return b;
}

int cut_rod(int *p,int n)
{
    int q=NULL;
    if(n==0)return 0;
    else for(int i=0;i<n;i++)
    {
        q=max(q,p[i]+cut_rod(p,n-1-i));
    }
    return q;
}

int main()
{
    int p[]={1,5,8,9,10,17,17,20,24,30};
    int n;
    cout<<"Please input a int number"<<endl;
    cin>>n;
    int r=cut_rod(p,n);
    cout<<r<<endl;

    return 0;
}

这版代码 由于p[]的原因,仅仅能对1~10求解。

所以对他进行小小的改进

第二版

#include <iostream>
using namespace std;
#define NIL (-0x7fffffff-1)

int max(int a,int b)
{
    if(a>=b)
        return a;
    else
        return b;
}

int cut_rod(int *p,int n)
{

    if(n==0)
        return 0;
    int q=NIL;
    if(n<=10){
        for(int i=0;i<n;i++)
        {
            q=max(q,p[i]+cut_rod(p,n-1-i));

        }
        return q;
        }else
            if(n>10){

                int b=n/10;
                n=n-b*10;
                if(n==0)
                    q=0;
                for(int i=0;i<n;i++)
                {
                    q=max(q,p[i]+cut_rod(p,n-1-i));
                }
            return q+b*30;
        }
}

int main()
{
    int p[]={1,5,8,9,10,17,17,20,24,30};
    int n;
    cout<<"Please input a int number"<<endl;
    cin>>n;
    int r=cut_rod(p,n);
    cout<<r<<endl;

    return 0;
}

这些是动态编程——简单的分割问题的解决方案钢棒

时间: 2024-10-05 14:49:57

动态规划 简单的分割问题的解决方案钢棒的相关文章

C++实现算法导论十五章动态规划之钢条分割问题

#include<iostream> #include<algorithm> #include<utility> #include<vector> using namespace std; //采用普通的递归算法来求解钢条分割的最大的收益 int cut_rod(int *p,const int &n) { if(n==0) return 0; int q=-1; for(int i=1;i<=n;++i) { q=max(q,p[i]+cut

51nod 1021 石子归并 (动态规划 简单代码)

题目: 思路:动态规划,递推式子 dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]);     dp[i][j]表示合并第i到第j个石子需要的最少代价.sum[i]表示前i个石子的价值,sum[j] - sum[i-1]即合成两堆石子((第i到第k合并出的石子),(第k+1到第j合并出的石子)). 但是考虑要求1-4, 需要先求出(1-1,2-4),(1-2,3-4),(1-3,4-4). 所以我们不能直接按横纵

简单生产者与消费者同步解决方案

/************************************************************************* > File Name: producerAndconsumer.c > Author: wangzhicheng > Mail: [email protected] > Created Time: Wed 18 Feb 2015 11:22:02 AM WST ************************************

一个简单的统计问题(解决方案:Trie树)

题目如图 ??输入几个不重复的单词和几个前缀,分别统计出单词中包含前缀的个数. Trie树 ??这个题目用到了 Trie 树.它在百度百科中的定义如下:在计算机科学中,Trie,又称字典树.单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高.Trie的核心思想是空间换时间,利用字符串的公共前缀

(动态规划、递归) leetcode 87. Scramble String

思路:用递归来做感觉比动态规划简单,题目让我们判断s1和s2是否是scramble string,则s1上(从左起计数)有一个长度为 i 的分割点将s1分为s1_l 和 s1_r 两段 分别与 s2的(从左起计数一个长度为i的) s2_l 和 s2_r 互为 scramble string:或者与 s2的(从右起计数一个长度为i的)s2.substr(s-i) 和 s2.substr(0, s-i) 互为 scramble string . 1)C++ 中的 substr(pos, len) 表

OpenCV笔记(十一)——图像的阈值操作(一种分割的方法)

对图像进行阈值的操作,可以认为是一种简单的分割前景和背景的方法. 这种分割的方法一般用在前景像素和背景像素的强度值反差比较明显的情况下,如下图: 我们可以看到这幅苹果的图像,代表前景的是苹果,代表背景的是白色部分.这幅图像前景背景分明,所以可以取一个阈值,如200.在图像中,凡是灰度低于200的像素,我们认作是前景,将其值设为255,凡是灰度不低于200的像素,我们认作是背景,将其值设为0.获得一张新的Mask,将原始的图像与这张Mask做与(&)运算,就能够得到分割好的图像. 一般来说,阈值化

算法一(动态规划)

运筹学:依照给定的条件和目标,从众多方案中选择最佳方案!动态规划是运筹学的重要分支之一,是解决多阶段决策过程最优化的一种方法. 动态规划简单地说就是:采用分治的策略,把求最优解问题分解为求若干个子问题的最优解,子问题也递归地分解为子问题的组合,通过递归递推等方法,把原问题最优解与局部子问题最优解联系起来,以求最后的解.这些局部子问题之间可能有重叠,就是某个子问题可能需要求解多次,因此需要将子问题及其解记录下来,这样对每个子问题只需求解一次,从而提高了效率. 原问题最优当且仅当子问题最优 以LIS

分布式事务,EventBus 解决方案:CAP【中文文档】(转)

出处:http://www.cnblogs.com/savorboard/p/cap-document.html 前言 很多同学想对CAP的机制以及用法等想有一个详细的了解,所以花了将近两周时间写了这份中文的CAP文档,对 CAP 还不知道的同学可以先看一下这篇文章. 本文档为 CAP 文献(Wiki),本文献同时提供中文和英文版本,英文版本目前还在翻译中,会放到Github Wiki 中. 目录 前言 1.Getting Started 1.1 介绍 1.2 应用场景 1.3 Quick St

字符串分割--java中String.split()用法

在java.lang包中有String.split()方法,返回是一个数组. 1.“.”和“|”都是转义字符,必须得加"\\"; 如果用“.”作为分隔的话,必须是如下写法: String.split("\\."),这样才能正确的分隔开,不能用String.split("."); 如果用“|”作为分隔的话,必须是如下写法: String.split("\\|"),这样才能正确的分隔开,不能用String.split("