AcWing 1019. 庆功会
原题链接
简单
作者:
minux
,
2020-05-10 19:20:59
,
所有人可见
,
阅读 1131
c++
#include <bits/stdc++.h>
using namespace std;
const int M=6005;
int f[M];
int n,m;
int main(){
// 多重背包问题
memset(f, 0x00, sizeof f);
cin>>n>>m;
for(int i=0; i<n; ++i){
int v, w, s;
cin>>v>>w>>s;
for(int j=m; j>=0; --j)
for(int k=0; k<=s && k*v<=j; ++k) // 枚举每种物品的约束
f[j]=max(f[j], f[j-k*v]+k*w);
}
cout<<f[m]<<endl;
return 0;
}
python
class Solution:
def main(self, n:int, m:int):
f=[0 for _ in range(m+1)]
for _ in range(n):
v,w,s=map(int, input().split())
for j in range(m+1)[::-1]:
for k in range(s+1):
if k*v<=j:
f[j]=max(f[j], f[j-k*v]+k*w)
print(f[m])
if __name__ == '__main__':
n,m=map(int, input().split())
sol=Solution()
sol.main(n, m)