動態規劃01--切鋼條(1)
# -*- coding: utf-8 -*-
import random
def getp(n):
'''
獲取一個長度為n的價格表
'''
p = [0 for i in range(n)]
for i in range(n):
p[i] = random.randint(1, n)
return p
def cut_rod(p, n):
if n==0:
return 0
else:
q = 0
for i in range(1, n+1):
#從1開始切割, 切刀最後一個結束
q = max(q, p[i-1] + cut_rod(p, n-i))
return q
n = 10
p = getp(n)
print(p)
q = cut_rod(p, n)
print(q)
相關推薦
動態規劃01--切鋼條(1)
# -*- coding: utf-8 -*- import random def getp(n): ''' 獲取一個長度為n的價格表 ''' p = [0 for i
動態規劃演算法--切鋼條問題
演算法導論中闡釋動態規劃演算法的第一節,就是鋼條切割問題: java程式碼簡單實現了一下: package cms.open.itPlatform.algorithm; public class DynamicPlan { public static void m
動態規劃-01背包
-1 體積 targe dynamic ora 。。 sdn aik .cn 先認錯,學長們很早之前就講過了,然而我現在才來寫。。。 01背包 01背包是在M件物品取出若幹件放在空間為W的背包裏,每件物品的體積為W1,W2……Wn,與之相對應的價值為P1,P2……Pn。 0
【洛谷】【動態規劃/01背包】P2925 [USACO08DEC]幹草出售Hay For Sale
ase GC def 算法分析 name ios source sep gis 【題目描述:】 約翰遭受了重大的損失:蟑螂吃掉了他所有的幹草,留下一群饑餓的牛.他乘著容量為C(1≤C≤50000)個單位的馬車,去頓因家買一些幹草. 頓因有H(1≤H≤5000)包幹草,每一包
動態規劃——01背包問題
獲取 01背包問題 {0} pre 也不能 計算方法 sin src names 0-1 背包問題 給定 n 種物品和一個容量為 C 的背包,物品 i 的重量是 wi,其價值為 vi 。 問:應該如何選擇裝入背包的物品,使得裝入背包中的物品的總價值最大? 面對每個物品,我們
動態規劃 -- 01揹包案例(python)
01揹包 m個物品價值為 p[m],體積為 w[m],現有一個容量為 v 的揹包,怎麼裝物品價值最大? 我們嘗試用動態規劃來解決這個問題 一般來說,只要問題可以劃分成規模更小的子問題,並且原問題的最優解中包含了子問題的最優解(即滿足最優子化原理),則可以
C++ 動態規劃 01揹包+ 最大字陣列和 +最短路徑 +斐波那契數列
int max(int a,int b) { return a>b?a:b; } /* 0 1 揹包 */ int MaxValue() { int Weight[5]={2,2,6,5,4};//物品的重量陣列 int Value
LintCode 125: Backpack II (動態規劃經典題: 0-1揹包問題)
解法1: 經典DP解法。 時間複雜度O(MN),空間複雜度O(MN)。 注意:dp[m+1][n+1],如果定義成dp[m][n],dp[0][]就有歧義:到底表示不取任何包,還是取包0呢? class
動態規劃——01揹包問題
package pack01; public class PackTest_01 { public static void main(String[] args) { // TODO Auto-generated method stub
動態規劃-01揹包問題
揹包問題是很經典的動態規劃問題,變種問題也很多,最基本的問題是01揹包問題 問題描述: 有n 個物品,它們有各自的體積和價值,現有給定容量的揹包,如何讓揹包裡裝入的物品具有最大的價值總和? i:物品 1 2 3 4 w:體積 2
動態規劃---01揹包與記憶化搜尋
動態規劃是一種高效的演算法。在數學和電腦科學中,是一種將複雜問題的分成多個簡單的小問題思想 ---- 分而治之。因此我們使用動態規劃的時候,原問題必須是重疊的子問題。運用動態規劃設計的演算法比一般樸素演算法高效很多,因為動態規劃不會重複計算已經計算過的子問
揹包問題小總結 習題(動態規劃01揹包(第k優解)完全揹包,多重揹包)acm杭電HDU2639,HDU2602,HDU1114,HDU2191
1、01揹包(每種物品只有一個) 題目 有N件物品和一個容量為V的揹包。第i件物品的費用是c[i],價值是w[i]。 求解將哪些物 品裝入揹包可使價值總和最大。 基本思路 這是最基礎的揹包問題,特點是:每種物品僅有一件,可以選擇放或不放。 用子問題定義狀態:
深度優先搜尋+動態規劃——01揹包類似問題
描述 今天是陰曆七月初五,acm隊員zb的生日。zb正在和C小加、never在武漢集訓。他想給這兩位兄弟買點什麼慶祝生日,經過調查,zb發現C小加和never都很喜歡吃西瓜,而且一吃就是一堆的那種,zb立刻下定決心買了一堆西瓜。當他準備把西瓜送給C小
【經典動態規劃問題】0-1揹包問題
0,1揹包問題 一個揹包有一定的承重cap,有N件物品,每件都有自己的價值,記錄在陣列v中,也都有自己的重量,記錄在陣列w中,每件物品只能選擇要裝入揹包還是不裝入揹包,要求在不超過揹包承重的前提下,選出物品的總價值最大。 每個物品只有1個,給定物品的重量w價值v及物品數n和承重cap。請返回
動態規劃 —— 01揹包
原理 動態規劃與分治法類似,都是把大問題拆分成小問題,通過尋找大問題與小問題的遞推關係,解決一個個小問題,最終達到解決原問題的效果。 但不同的是,分治法在子問題上被重複計算了很多次,而動態規劃則具有記憶性,通過填寫表把所有已經解決的子問題答案紀錄下來,在新問題
動態規劃之切割鋼條
/** * 這個是自頂向下的求法 */ #include <iostream> #include <string> #include <limits.h> #include <stdio.h> using namespace std; #defin
動態規劃問題之 鋼條切割
動態規劃與分治演算法異同: 分治演算法將問題劃分為互不相交的子問題,遞迴的求解子問題。分治演算法會做出許多不必要的工作,會反覆求解那些公共子問題。而動態規劃對子問題只求解一次,將其儲存在一個表格裡面,無需每次都重新計算。 動態規劃通常用來求解最優化問題,這個
動態規劃學習-【0-1揹包問題】
題目描述: 問題:0-1揹包問題 描述:有一個揹包,它的容量為C(Capacity),現在有n種不同的物品編號分別為0...n-1,其中每一件物品的重量為w(i),價值為v(i)。問可以向這個揹包中盛放哪些物品,使得在不超過揹包容量的基礎上,物品的總價值最大。 解題思
vijosp1037搭建雙塔-較為清晰簡單的思路-動態規劃01揹包-差值dp
2001年9月11日,一場突發的災難將紐約世界貿易中心大廈夷為平地,Mr. F曾親眼目睹了這次災難。為了紀念“9?11”事件,Mr. F決定自己用水晶來搭建一座雙塔。 Mr. F有N塊水晶,每塊水晶有一個高度,他想用這N塊水晶搭建兩座有同樣高度的塔,使他們成為一座雙塔,Mr. F可以從這N塊水晶中任取M(1
hdu 2546 飯卡 動態規劃 01揹包
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm&