首页 > 其他 > 详细

P2285 [HNOI2004]打鼹鼠

时间:2018-10-31 13:43:36      阅读:126      评论:0      收藏:0      [点我收藏+]

一个类似于LIS的dp

既然时间都按顺序给你了,那么就可以很轻松地想出一个乱搞的dp。

dp[i]为前\(i\)只鼹鼠出现的时间段内,最多打死的鼹鼠。

那么有显然的转换过程,也就是判断他规定时间内走不走得过来,如果走得过来就直接转移即可。

最后的答案是\(max(dp[i])\),不知道为什么哩!

总结:千万要注意\(n\)\(m\),不要弄反或者忽略!

代码:

#include<cstdio>
#include<algorithm>
#define ll long long
const int maxn = 1005, maxm = 10005;
struct Mice
{
    ll tim, x, y;
} s[maxm];
ll n, m;
ll dp[maxm];
int main()
{
    scanf("%lld%lld", &n, &m);
    for(int i = 1; i <= m; i++) scanf("%lld%lld%lld", &s[i].tim, &s[i].x, &s[i].y);
    for(int i = 1; i <= m; i++)
    {
        dp[i] = 1;
        for(int j = 1; j < i; j++)
        {
            if(abs(s[j].x - s[i].x) + abs(s[j].y - s[i].y) <= s[i].tim - s[j].tim)
            {
                dp[i] = std::max(dp[i], dp[j] + 1);
            }
        }
    }
    ll ans = -0x3f3f3f3f;
    for(int i = 1; i <= m; i++)
    {
        ans = std::max(ans, dp[i]);
    }
    printf("%lld\n", ans);
    
    return 0;
}

P2285 [HNOI2004]打鼹鼠

原文:https://www.cnblogs.com/Garen-Wang/p/9882291.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!