zoukankan      html  css  js  c++  java
  • NYOJ_195

    本是动态规划,刚开始的思路是在每个点观察最优解。但是这样似乎比较慢。没办法,参考了别人的思路。就是只考虑 提示的可通过格子即可。

    思路:

     1:先将输入的数据存到一个结构体中(方便排序)

     2.将输入的数据进行排序。因为输入时可能不是从小到大的顺序输入的

     3. 用动态规划的思想,排出从起始位置到最后的可行 最短长度

     4. 长加宽 减去 缩短的距离

    代码:

    #include<stdio.h>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    struct str{
    	int x;
    	int y;
    }a[1002];
    
    
    bool cmp(str c,str b)
    {
    	if(c.x<b.x)
    		return true;
    	else 
    		return false;
    }
    int max(int b,int c)
    {
    	return b>c?b:c;
    }
    int main()
    {
    	int n,m,k,f[1002],maxs,i,j;
    	while(scanf("%d%d%d",&n,&m,&k)!=EOF)
    	{
    		for(i=0;i<k;++i)
    		{
    			scanf("%d%d",&a[i].x,&a[i].y);
    		}
    		sort(a,a+k,cmp);
    		maxs=0;
    		f[0]=1;
    		for(i=0;i<k;++i)
    		{
    			f[i]=1;
    			for(j=0;j<i;++j)
    			{
    				if(a[j].x<a[i].x && a[j].y<a[i].y)
    					f[i]=max(f[i],f[j]+1);
    			}
    			if(maxs<f[i])
    				maxs = f[i];
    		}
    		printf("%.0lf\n",(n+m-(2-sqrt(2.0))*maxs)*100);
    	}
    	return 0;
    }
    
  • 相关阅读:
    拍皮球 (Java实现)
    余弦 (java实现)
    循环输出
    从1输出n位数字
    数值的整数次方
    旋转数组的最小数字
    简单使用栈实现队列
    重建二叉树
    链表逆序输出
    替代空格
  • 原文地址:https://www.cnblogs.com/zibuyu/p/2786383.html
Copyright © 2011-2022 走看看