题目

代码
#include <bits/stdc++.h>
using namespace std;const int N = 1010;
const int M = 5010;int mon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int n, m, k, last[N], f[N][M];struct node
{int d, v;bool operator < (const node &t) const{return d < t.d;}
} a[N];int main()
{for(int i = 1; i <= 12; i++)mon[i] += mon[i-1];scanf("%d%d%d", &n, &m, &k);for(int i = 1; i <= n; i++){int m, d;scanf("%d%d%d", &m, &d, &a[i].v);a[i].d = mon[m-1] + d;}sort(a+1, a+n+1);for(int i = 1; i <= n; i++)for(int j = i-1; j; j--)if(a[i].d - a[j].d >= k){last[i] = j;break;}for(int i = 1; i <= n; i++)for(int j = m; j >= a[i].v; j--)f[i][j] = max(f[i-1][j], f[last[i]][j - a[i].v] + a[i].v);printf("%d", f[n][m]);
}