#include <iostream>
using namespace std;
struct goods
{
int wei;
int val;
}goods[1024];
int gro[1024][1024];
int dp[1024][1024];
int main()
{
int n, m;
cin >> m >> n;
int max = 0;
for (int i = 1; i <= n; i++)
{
int k;
cin >> goods[i].wei >> goods[i].val >> k;
if (k > max) max = k;
gro[k][0]++;
gro[k][gro[k][0]] = i;
}
for (int i = 1; i <= max; i++)
for (int j = 1; j <= gro[i][0]; j++)
for (int k = 1; k <= m; k++)
{
if (goods[gro[i][j]].wei < m)
{
if (dp[i][k] == 0)
{
if (dp[i - 1][k] < dp[i - 1][k - goods[gro[i][j]].wei] + goods[gro[i][j]].val && k - goods[gro[i][j]].wei >= 0)
dp[i][k] = dp[i - 1][k - goods[gro[i][j]].wei] + goods[gro[i][j]].val;
else dp[i][k] = dp[i - 1][k];
}
else
{
if (dp[i][k] < dp[i - 1][k - goods[gro[i][j]].wei] + goods[gro[i][j]].val && k - goods[gro[i][j]].wei >= 0)
dp[i][k] = dp[i - 1][k - goods[gro[i][j]].wei] + goods[gro[i][j]].val;
}
}
else if (dp[i][k] == 0)
dp[i][k] = dp[i - 1][k];
}
cout << dp[max][m] << endl;
}
洛谷P1757 通天之分组背包
最新推荐文章于 2024-04-12 17:32:41 发布