uva 12018 Juice Extractor 谷歌杯程序设计大赛

题目链接:http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=19242      uva 12018 谷歌杯程序设计大赛

这个题目就是有关水果忍者的游戏的题目,就是每一个水果都有一个出现时间和一个消失时间,在某一次出现的水果可以一次性切掉,而一次切掉的水果数如果小于3则不得分,大于三时,就得到相应的分数(切掉几个得几分),切掉之后水果消失。问能得到的最大分数值。

uva 12018 uva 12018

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Fruit{
    int start,end;
};

Fruit fr[1010];
int n,dp[1010];
int ans;

int cmp(const void * a,const void * b){
	Fruit * f1=(Fruit *)a;
	Fruit * f2=(Fruit *)b;
	return f1->start-f2->start;
}

int max(int a,int b){
	return a>b?a:b;
}

void ISureIWillAc(){
	int i;
	ans=0;
	qsort(fr,n,sizeof(Fruit),cmp);
	
	memset(dp,0,sizeof(dp));
	for(i=2; i<n; i++){
		int score=0;
		if(i+1<n && fr[i].start==fr[i+1].start) continue;
		for(int j=i; j>=0; j--){
			if(fr[j].start<=fr[i].start && fr[j].end>=fr[i].start) score++;
			int may=score;
			if(may<3) may=0;
			if(j==0){
				dp[i]=max(dp[i],may);
			}else{
				dp[i]=max(dp[i],dp[j-1]+may);
			}
			ans=max(ans,dp[i]);
		}
	}
}

int main(){
    int t,i;
    scanf("%d",&t);
    for(int cas=1;cas<=t;cas++){
		printf("Case #%d: ",cas);
        scanf("%d",&n);
        for(i=0; i<n; i++){
            scanf("%d%d",&fr[i].start,&fr[i].end);
        }
		ISureIWillAc();
        printf("%d\n",ans);
    }
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值