传送门
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;
}