poj 3616

題意:

有一頭奶牛,它有不同的可以擠奶的時間段。且每一個產奶時間段的產量不一樣。問,此奶牛的最大產量。

我們找的狀態是奶牛在時間點 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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章