这是一道谷外的题目(应该?
题目是这个样子的⬇
时间限制 : 1.000sec 内存限制 : 128MB
题目描述
某公司有长度为 n 的铜条一根,现考虑将其切割为若干小铜条进行出售,以便获得最大收益。现在给出从 1 到 n 长度的铜条价格,请你帮忙编程求出所能获得的最大收益。
输入
共两行,第一行是铜条长度 n,第二行是空格隔开的 n 个整数,依次表示从 1 到 n 长度的铜条价格。
输出
所能获得的最大收益。
样例输入
4 1 5 8 9
样例输出
10
题目就到这
蒟蒻是这样子做的⬇
# include <cstdio>
# include <iostream>
using namespace std;
int n,p[60],dp[60];//p 是用来存每段铜条的价值的,dp[i] 表示长度为 i 的铜条的最大价值
bool a[60];
int dfs(int a) // 用来求长度为 a 的铜条的最大值
{
if (a == 0)
return 0;
for (int i = 1; i <= a; i++)
{
if (a - i >= 0)
dp[a] = max(dp[a],p[i] + dfs(a - i));//p[i] + dfs(a - i) 指当前长度为 i 的铜条的价值 + 长度为(总长 - 当前铜条长度 i )的铜条的价值
}
return dp[a];//返回长度为a铜条的最大价值
}
int main() {
scanf("%d",&n);
for (int i = 1;i <= n;i++)
scanf("%d",&p[i]);
printf("%d",dfs(n));
}
当本蒟蒻满怀信心地交上去后它显示➡时间超限75 求一个不复杂的且时间复杂度低的算法(或说该怎么优化?
PS: 对于蒟蒻来说,不复杂 = 难不过dp,时间复杂度低 = 不会超时
谢谢各位神犇