钢条切割最优解算法

最优价格表
钢条长度 1 2 3 4 5 6 7 8 9 10钢条价格 1 5 8 9 10 17 17 20 24 30 下面为计算当钢条长度为n时,最优的价格`using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 钢条最优解算法
{
class Program
{
static void Main(string[] args)
{
int n = 9; //钢条长度
int[] p = { 0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30 }; // 钢条长度对应的价格
int[] res = new int[n+1]; //res为记录已算出当钢条长度为n时的最优解数组
Console.WriteLine(Up(n,p,res));
Console.WriteLine(BottomUp(n,p,res));
Console.ReadKey();
}

    //static int UpDown(int n , int[] p) //递归法
    //{
    //    if (n == 0) 
    //    {
    //        Console.WriteLine("n==0");
    //        return 0;
    //    }
    //    int tempPrice = 0;
    //    for (int i = 1; i < n + 1; i++)
    //    {
    //        int maxPrice = p[i] + UpDown(n-i,p);
    //        if (maxPrice > tempPrice)
    //        {
    //            tempPrice = maxPrice;
    //        }
    //    }
    //    return tempPrice;
    //}

    static int Up(int n , int[] p,int[] result) //自上向下(备忘录)
    {
        if (n == 0) return 0;
        if (result[n] != 0) return result[n];
        int tempPrice = 0;
        for (int i = 1; i < n + 1; i++)
        {
            int maxPrice = p[i] + Up(n - i, p,result);
            if (maxPrice > tempPrice)
            {
                tempPrice = maxPrice;
            }
        }
        result[n] = tempPrice;
        return tempPrice;
    }

    static int BottomUp(int n , int[] p , int[] result) //自下向上(备忘录)
    {
        for (int i = 1; i < n+1; i++)
        {
            int tempPrice = 0;
            for (int j = 0; j <= i ; j++)
            {
                int maxPrice = p[j] + result[i - j];
                if (maxPrice > tempPrice)
                    tempPrice = maxPrice;
            }
            result[i] = tempPrice;
        }
        return result[n];
    }
}

}`

你可能感兴趣的:(笔记)