ProgramAlgTrain/20240919/CSP常考算法模板/混合背包.cpp

33 lines
700 B
C++
Raw Permalink Normal View History

2024-09-19 02:22:41 +00:00
#include <bits/stdc++.h>
using namespace std;
int m, n;
int w[31], c[31], p[31];
int f[201];
/*
10 3
2 1 0
3 3 1
4 5 4
*/
int main(){
scanf("%d%d",&m,&n);
for (int i = 1; i <= n; i++)
scanf("%d%d%d",&w[i],&c[i],&p[i]);
for (int i = 1; i <= n; i++)
if (p[i] == 0) { //<2F><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
for (int j = w[i]; j <= m; j++)
f[j] = max(f[j], f[j-w[i]]+c[i]);
}
else {
for (int j = 1; j <= p[i]; j++) //01<30><31><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>ر<EFBFBD><D8B1><EFBFBD>
for (int k = m; k >= w[i]; k--)
f[k] = max(f[k],f[k-w[i]]+c[i]);
}
printf("%d",f[m]);
return 0;
}