码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces 608C:(dp)

时间:2015-12-24 19:16:52      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

从又往左点灯塔,点亮一个的同时,往左di范围内的灯塔全部被破坏。现在能在最右端按一个灯塔,攻击范围任意,问到最后最少有几个灯塔留下

 

用dp瞎搞。具体看代码吧

技术分享
#include"cstdio"
#include"queue"
#include"cmath"
#include"stack"
#include"iostream"
#include"algorithm"
#include"cstring"
#include"queue"
#include"vector"
#define ll long long

using namespace std;
const int MAXN = 1e6;
const int MAXE = 200500;
const int INF = 0x3f3f3f;
struct node{
    int a,b;
}x[MAXN];

int sum[MAXN];
int dp[MAXN*10];

bool cmp(node x,node y){
    return x.a<y.a;
}

int main(){
    int n;scanf("%d",&n);
    int maxv=-1;
    for(int i=0;i<n;i++) {
        scanf("%d%d",&x[i].a,&x[i].b);
        maxv=max(maxv,x[i].a);
    }
    if(n==1){
        printf("0\n");
        return 0;
    }
    sort(x,x+n,cmp);
    dp[x[0].a]=1;
    for(int i=x[0].a+1,j=1;i<=maxv;i++){
        if(i>=x[j].a){
            int t=x[j].a-x[j].b-1;
            if(t>=0)dp[i]=dp[t]+1;
            else dp[i]=1;
            j++;
        }
        else dp[i]=dp[i-1];
    }
    int ans=INF;
    for(int i=x[0].a;i<=maxv;i++) ans=min(ans,n-dp[i]);
    //cout<<i<<‘\t‘<<dp[i]<<endl;
    printf("%d\n",ans);
    return 0;
}
View Code

 

codeforces 608C:(dp)

标签:

原文地址:http://www.cnblogs.com/luxiaoming/p/5073982.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!