算法导论学习笔记-动态规划

Posted by Zexin Zhang on November 24, 2017

钢条切割

现有一段长度为n英寸的钢条和一个价格表pi,求切割方案使销售利益最大rn最大 tilpic

类似于01背包

子问题为暴力求解中的组合价值。
此算法为自下而上 (botton-up method)
i用来遍历钢条长度,记录价值。
j用来遍历dp[i]数组内的数据,max取最大值,保存为dp[i]。  

此原理可扩展到01背包

#include <cstdio>

#include <cstring>

#include <cmath>

#include <algorithm>

using namespace std; 

//算法导论-钢条切割-自下而上 

int main(){
	int p[11]={0,1,5,8,9,10,17,17,20,24,30};
	int dp[101];
	memset(dp,0,sizeof(dp));
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=i;j++){
			dp[i]=max(dp[i],p[j]+dp[i-j]);
		}
	}
	printf("%d",dp[n]);
}

运行结果 runpic