You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
1000 B
C++
29 lines
1000 B
C++
#include <cstdio>
|
|
inline int max(int a, int b) { return a > b ? a : b; }
|
|
int N, m, G[60][2], W[60], C[60], f[3333];
|
|
bool M[60];
|
|
int main()
|
|
{
|
|
scanf("%d%d", &N, &m);
|
|
N /= 10;
|
|
for (int i = 1, v, p, q; i <= m; i++)
|
|
{
|
|
scanf("%d%d%d", &v, &p, &q);
|
|
C[i] = p * (W[i] = v / 10);
|
|
q ? G[q][0] ? G[q][1] = i : G[q][0] = i : M[i] = true;
|
|
}
|
|
for (int i = 1; i <= m; i++)
|
|
if (M[i]) for (int j = N, w, c; j; j--)
|
|
{
|
|
w = W[i], c = C[i];
|
|
if (j >= w) f[j] = max(f[j], f[j - w] + c);
|
|
w = W[i] + W[G[i][0]], c = C[i] + C[G[i][0]];
|
|
if (j >= w) f[j] = max(f[j], f[j - w] + c);
|
|
w = W[i] + W[G[i][1]], c = C[i] + C[G[i][1]];
|
|
if (j >= w) f[j] = max(f[j], f[j - w] + c);
|
|
w = W[i] + W[G[i][0]] + W[G[i][1]], c = C[i] + C[G[i][0]] + C[G[i][1]];
|
|
if (j >= w) f[j] = max(f[j], f[j - w] + c);
|
|
}
|
|
printf("%d", f[N] * 10);
|
|
return 0;
|
|
} |