Codeforces 607 A Chain Reaction

来源:互联网 发布:淘宝看店宝收费吗 编辑:程序博客网 时间:2024/05/17 03:07

传送门
http://codeforces.com/problemset/problem/607/A

题意:
给出每个怪物的位置和他向左能攻击的范围闭区间(不包括他本身),从右至左激活,现想在最右边加上一个怪物,使得最后死掉的怪物数量最少!!!!!

思路:
这种题目很明显的dp嘛,用dp[i]表示第i个位置能存活的最大怪物数量,从左到右扫描一遍,然后过程中更新一下最大值不就
ok了嘛!!!!!
具体更新的时候肯定是跟距离有关嘛,那么要么就是这个怪物的攻击力,如果没有怪物的话,不就是上一个位置能存活的最大怪物嘛!!!
最后的答案还要再处理一下哦!!
注意看一下位置 的起始坐标,应该是从0开始!!!
这也就连锁的导致了我下标特判的时候=0的位置判错,shit,改这种低级错误的时候一定要注意连锁效应!!!!!

#include<bits/stdc++.h>using namespace std;const int maxn=1e6+10;int pos[maxn],dp[maxn],n,range[maxn];int main(){    cin>>n;int d,e;    for(int i=1;i<=n;i++){        cin>>d>>e;pos[d]=1;range[d]=e;    }    int maxx=0;    for(int i=0;i<=maxn-10;i++){        if(pos[i]!=0){            if(i-range[i]-1<0) dp[i]=1;             else dp[i]=dp[i-range[i]-1]+1;        }        else{            dp[i]=dp[i-1];        }        maxx=max(maxx,dp[i]);    }    printf("%d\n",n-maxx);    return 0;}
1 0