蒟蒻疑问
查看原帖
蒟蒻疑问
917025
XYzero楼主2024/8/8 11:02
#include<bits/stdc++.h>
using namespace std;
const int N = 10000;
int f[N][N],n,m,pos;
struct object{
	int w,v,id;
}a[N];
vector<int>e[N];
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	map<int,bool>vis;
	cin >> m >> n;
	for(int i = 1;i <= n;i++){
		cin >> a[i].w >> a[i].v >> a[i].id; 
		e[a[i].id].emplace_back(i);
		if(!vis[a[i].id]){
			pos ++;
			vis[a[i].id] = true;
		}
	} 
	for(int k = 1;k <= pos;k++){
		for(int j = 1;j <= m;j++){
			for(auto i : e[k]){
				if(j >= a[i].w){
					f[k][j] = max(f[k - 1][j],f[k - 1][j - a[i].w] + a[i].v);
				}
				else f[k][j] = f[k - 1][j];
			}
		}
	}
	
	cout << f[pos][m];
	return 0;
}

如上这段代码,为什么是错的,但去掉第一维后却对了?

2024/8/8 11:02
加载中...