HDU5410(01背包+完全背包)

xiaoxiao2021-02-27  187

背包变形,变成了每次都加A[I],但是B[I]只加一次。一开始直接写了多重背包,后来发现b【i】加多了。后想想的确是想麻烦了。完全可以直接先01把两个都背一次。然后再完全背包只背a就ok了、

#include<bits/stdc++.h> using namespace std; typedef long long ll; int w[1010],a[1010],b[1010]; int dp[2010]; int main() { int t;scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); int m,n;scanf("%d%d",&m,&n); for(int i=1;i<=n;i++)scanf("%d%d%d",&w[i],&a[i],&b[i]); for(int i=1;i<=n;i++) { for(int j=m;j>=w[i];j--) dp[j]=max(dp[j],dp[j-w[i]]+a[i]+b[i]); for(int j=w[i];j<=m;j++) dp[j]=max(dp[j],dp[j-w[i]]+a[i]); } printf("%d\n",dp[m]); } return 0; }

转载请注明原文地址: https://www.6miu.com/read-10358.html

最新回复(0)