//长度1,2,3,4,5,6,7,8,9,10
//价格1,5,8,16,10,17,17,20,24,30
//n为钢条长度,m为可切割的数据组数
//输入示例:10 10 1 5 8 16 10 17 17 20 24 30
//结果:37
#include <iostream>
#include <vector>
using namespace std;
int max(int a, int b)
{
if (a > b)
{
return a;
}
return b;
}
int dp(vector<int> money, vector<int> list)
{
int temp = 0;
for (int i = 1; i <money.size(); i++)//-1
{
for (int j = 1; j <= i; j++)
{
money[i] = max(money[i], list[j] + money[i - j]);
}
}
return money[money.size() - 1];
}
int main()
{
int n, m;
cin >> n >> m;
vector<int> money(n + 1, 0);
vector<int> list(n + 1, 0);
for (int i = 1; i <= m; i++)
{
cin >> list[i];
}
cout<<dp(money, list);
return 0;
}
DP钢条切割问题:将长为n的钢条,切割成m段,不同长度的钢条市场价格不同,切割本身没有成本,求最大价值的切割方案
最新推荐文章于 2022-11-12 14:51:49 发布