题意:一道游戏题。讲述水果忍者游戏,给了水果出现的时间和消失的时间,当某个时间切水果个数少于三个,不得分;当个数为n>=3,则得n分。求所给时间段总得分。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Fruit
{
int u,v;
};
Fruit fru[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->u-f2->u;
}
void computing()
{
int i;
ans=0;
qsort(fru,n,sizeof(Fruit),cmp);
memset(dp,0,sizeof(dp));
for(i=2; i<n; i++)
{
int score=0;
if(i+1<n && fru[i].u==fru[i+1].u) continue;
for(int j=i; j>=0; j--)
{
if(fru[j].u<=fru[i].u && fru[j].v>=fru[i].u) 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",&fru[i].u,&fru[i].v);
}
computing();
printf("%d\n",ans);
}
return 0;
}