社区讨论

求优化

灌水区参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@m64pkvkv
此快照首次捕获于
2025/01/20 15:12
去年
此快照最后确认于
2025/11/04 11:13
4 个月前
查看原帖
MLE力
题目:有 n 件货物,它们的重量分别为 W 1 ​ ,W 2 ​ ,...,W n ​ ,价值分别为 P 1 ​ ,P 2 ​ ,...,P n ​
有一辆载重为 V 的货车,司机想从这 n 件货物中选取若干件,使得货车 满载(即所载货物重量之和恰好为 V )而归。求:车上货物的总价值最大为多少?
范围:1≤V≤100000 ,1≤n≤100,1≤W≤10000 ,1≤P≤1000
CPP
#include<bits/stdc++.h>
using namespace std;
int v,n,s[101],w[101],f[101][100001];
int main(){
	scanf("%d%d",&v,&n);
	for(int i=1;i<=n;i++) scanf("%d%d",&w[i],&s[i]);
	for(int i=0;i<=n;i++)
		for(int j=1;j<=v;j++) f[i][j]=-1;
    f[1][1]=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=v;j++)
			if(j>=w[i]){
				if(f[i-1][j-w[i]]==-1) f[i][j]=f[i-1][j];
				else f[i][j]=max(f[i-1][j-w[i]]+s[i],f[i-1][j]);
			}	
			else f[i][j]=f[i-1][j];
	}
	if(f[n][v]==-1) printf("0");
	else printf("%d",f[n][v]);
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...