10分!!!求此题方法
查看原帖
10分!!!求此题方法
541072
无敌的神楼主2022/10/22 15:38
#include<iostream>
#include<cstdio>
using namespace std; 
typedef long long ll; 
const int MAX_N=1010;
int n,W;
int f[MAX_N+1][MAX_N+1];//DP数组
int w[MAX_N],v[MAX_N],l[MAX_N];
int s[MAX_N][MAX_N];
//从第i个物品开始挑选总重小于j的部分
void solve() { //
    int i,j;
    for(j=0;j<=W;j++) f[0][j]=0;//背包没有放入物品的最优值 
    for( i=1; i<=n; i++ ) {//注意变量n
	   for( j=0; j<=W; j++ ) {
	     if(j>=w[i]){// 当前背包容易能放下该物品 
           f[i][j]=max(f[i-1][j],f[i-1][j-w[i]] +  v[i]);
	     }else f[i][j]=f[i-1][j]+l[i]; //放不下,则任然维护上一阶段的值
	 }
   } 
} 
int main(){
	scanf("%d%d",&n,&W);//W空间,n个物品 
    for(int i=1; i<=n; i++) cin>>l[i]>>v[i]>>w[i];
    solve();
    printf("%d",f[n][W]*5); 
    return 0;
}
2022/10/22 15:38
加载中...