时间优化求助
查看原帖
时间优化求助
222578
jingkongwanglimiaoa楼主2020/8/18 11:47

这是一道谷外的题目(应该??

题目是这个样子的⬇


时间限制 : 1.000sec1.000 sec 内存限制 : 128MB128 MB

题目描述

某公司有长度为 nn 的铜条一根,现考虑将其切割为若干小铜条进行出售,以便获得最大收益。现在给出从 11nn 长度的铜条价格,请你帮忙编程求出所能获得的最大收益。

输入

共两行,第一行是铜条长度 nn,第二行是空格隔开的 nn 个整数,依次表示从 11nn 长度的铜条价格。

输出

所能获得的最大收益。

样例输入

44 11 55 88 99

样例输出

1010

题目就到这

蒟蒻是这样子做的⬇

# 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));
}

当本蒟蒻满怀信心地交上去后它显示➡时间超限7575 求一个不复杂的且时间复杂度低的算法(或说该怎么优化?

PS:PS: 对于蒟蒻来说,不复杂 = 难不过dp,时间复杂度低 = 不会超时

谢谢各位神犇

2020/8/18 11:47
加载中...