题目链接:点击进入
思路
分组背包,套板子
代码
#include<iostream>
#include<string>
#include<map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define best 131
#define INF 0x3f3f3f3f
#define P pair<int,int>
using namespace std
;
typedef long long ll
;
typedef unsigned long long ull
;
const double eps
=1e-5;
const double pai
=acos(-1.0);
const int N
=1e3+10;
const int maxn
=110;
const int mod
=1e9+7;
int n
,m
,k
,t
,w
[N
],v
[N
],c
[N
],g
[N
][N
];
ll f
[N
];
int main()
{
scanf("%d%d",&m
,&n
);
for(int i
=1;i
<=n
;i
++)
{
scanf("%d%d%d",&w
[i
],&v
[i
],&k
);
t
=max(t
,k
);
c
[k
]++;
g
[k
][c
[k
]]=i
;
}
for(int i
=1;i
<=t
;i
++)
{
for(int j
=m
;j
>=0;j
--)
{
for(int z
=1;z
<=c
[i
];z
++)
{
if(j
>=w
[g
[i
][z
]])
{
f
[j
]=max(f
[j
],f
[j
-w
[g
[i
][z
]]]+v
[g
[i
][z
]]);
}
}
}
}
printf("%lld\n",f
[m
]);
return 0;
}
转载请注明原文地址:https://blackberry.8miu.com/read-9333.html