zoukankan      html  css  js  c++  java
  • hdu 2881 Jack's struggle(DP)

    对于所有的任务所在的地点按照时间排序,可以将其看成是一道非常简单的“天上掉馅饼”的题的二维版本。

    将这些任务看成从天而降的馅饼,统计有哪些之前馅饼掉落的位置可以在两者时间差内到达该点的点,取其最大值。

    这道题的数据很邪门,题目没有给出任何提示,但是用C++提交的话会超时,用G++提交的话3000+ms可以A掉,查了1700ms。我看提交的代码都是G++。这不合适吧?

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<cmath>
    #define N 10005
    struct node
    {
    	int x,y;
    	int t;
    }a[N];
    int dp[N];
    int cmp(const void *a,const void *b)
    {
    	return (*(node *)a).t-(*(node *)b).t;
    }
    int Max(int x,int y)
    {
    	if(x>y)
    		return x;
    	return y;
    }
    int main()
    {
    	int n,m;
    	while(scanf("%d%d",&m,&n),m||n)
    	{
    		int i,j;
    		for(i=1;i<=n;i++)
    			scanf("%d%d%d",&a[i].t,&a[i].x,&a[i].y);
    		qsort(a+1,n,sizeof(a[0]),cmp);
    		memset(dp,0,sizeof(dp));
    		for(i=1;i<=n;i++)
    		{
    			dp[i]=1;
    			for(j=1;j<i;j++)
    			{
    				if(abs(a[j].x-a[i].x)+abs(a[j].y-a[i].y)<=a[i].t-a[j].t)
    					dp[i]=Max(dp[i],dp[j]+1);
    			}
    		}
    		int max=0;
    		for(i=1;i<=n;i++)
    			max=Max(max,dp[i]);
    		printf("%d
    ",max);
    	}
    	return 0;
    }


  • 相关阅读:
    OpenCL 获取Program信息
    匈牙利算法
    经常使用的webservice接口
    庞果网之高斯公式
    T4 生成实体和简单的CRUD操作
    zTree实现地市县三级级联报错(三)
    AlphaBlend
    cocos2d-x 3.0 事件处理
    rman多通道全备份脚本
    Linux下的简单好用的计算器bc
  • 原文地址:https://www.cnblogs.com/riskyer/p/3223813.html
Copyright © 2011-2022 走看看