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

来源:互联网 发布:windows无访问权限 编辑:程序博客网 时间:2024/05/21 14:48

题目链接: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);    }}


原创粉丝点击