有改进方法吗
查看原帖
有改进方法吗
786154
zhanxiangkun楼主2024/11/25 20:22

倒序遍历dp 怎么优化到log

#include <bits/stdc++.h>
using namespace std;

const int N = 10010, K = 510;

int n, k, a[N], dp[N][K];

int main(){
	cin >> n >> k;
	for (int i = 1;i <= n;i ++) cin >> a[i];
	a[n + 1] = 0x3f3f3f3f;
	for (int i = n;i >= 1;i --){
		for (int c = 0; c <= k;c ++){
			dp[i][c] = dp[i + 1][c];
			for (int j = i + 1;j <= n + 1;j ++){
				if (a[j] >= a[i]) dp[i][c] = max(dp[i][c], dp[j][c] + 1);
				else if (c >= a[i] - a[j]) dp[i][c] = max(dp[i][c], dp[j][c - (a[i] - a[j])] + 1);
			}
		}
	}
	cout << dp[1][k];
	return 0;
} 
2024/11/25 20:22
加载中...