文章

11

粉丝

20

获赞

4

访问

8.3k

头像
dp数组O(n)终极优化版+vector动态更新路径(内存254kb,运行时间4ms)
P1567
发布于2023年8月6日 19:52
阅读数 784

#include<iostream>
#include<vector>
using namespace std;
int main() {
	int M, N;
	while (cin >> M >> N) {
		int dp[101] = {0}, w, v;
		vector<int> path[1001];//动态更新路径
		for (int i = 1; i <= N; i++) {
			cin >> w >> v;
			for (int j = M; j >= w; j--)
				if (dp[j - w] + v > dp[j]) {
					dp[j] = dp[j - w] + v;
					path[j] = path[j - w];
					path[j].push_back(i);
				}
		}
		cout << dp[M] << endl;
		if(dp[M]) {
			for(int i = 0; i < path[M].size(); i++)
				cout << path[M][i] << ' ';
			cout << endl;
		}
	}
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发