題意:
有一頭奶牛,它有不同的可以擠奶的時間段。且每一個產奶時間段的產量不一樣。問,此奶牛的最大產量。
我們找的狀態是奶牛在時間點 x,所產生的最大奶量dp[x]。那麼 dp[x] = max(dp[x], dp[j] + val)。j爲之前的節點。若我們能夠有序的更新x,那麼j節點自然也就是最優解。
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1000 + 5;
struct node
{
int x, y, val;
bool operator < (const node& a) const
{
return y < a.y;
}
};
node item[maxn];
int dp[maxn];
int main()
{
int n, m, r;
while(scanf("%d%d%d", &n, &m ,&r) == 3)
{
for(int i = 0; i < m; i++)
{
scanf("%d%d%d", &item[i].x, &item[i].y, &item[i].val);
}
sort(item, item + m);
for(int i = 0; i < m; i++)
{
dp[i] = item[i].val;
for(int j = 0; j < i; j++)
{
if(item[j].y + r <= item[i].x)
{
dp[i] = max(dp[i], dp[j] + item[i].val);
}
}
}
int ans = 0;
for(int i = 0; i < m; i++)
ans = max(ans, dp[i]);
printf("%d\n", ans);
}
return 0;
}