• uva is bigger smarter dp


    //#include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    //using namespace std;
    
    const int MAXN=10000;
    
    struct ele
    {
    	int inte;
    	int weit;
    	int num;
    }eles[MAXN];
    
    int cmp(const void *a,const void *b)
    {
    	struct ele t=*(struct ele *)a;
    	struct ele l=*(struct ele *)b;
    
    	if(t.inte!=l.inte)
    		return t.inte-l.inte;
    	else
    		return l.weit-t.weit;
    }
    
    int main()
    {
    	int m[MAXN],q[MAXN];
    
    	int i,j;
    
    	int n;
    
    	while(scanf("%d",&n)!=EOF)
    	{
    		for(i=1;i<=n;i++)
    		{
    			scanf("%d%d",&eles[i].inte,&eles[i].weit);
    			eles[i].num=i;
    		}
    
    		qsort(eles+1,n,sizeof(ele),cmp);
    
    		/*for(j=1;j<=n;j++)
    		{
    			printf("%d %d\n",eles[j].inte,eles[j].weit);
    		}*/
    
    		for(i=1;i<=n;i++)
    			m[i]=1;
    
    		int t=1,k,f,w,y;
    
    		memset(q,0,sizeof(q));
    
    		for(i=n;i>=1;i--)
    		{
    			k=0;
    			for(j=i+1;j<=n;j++)
    			{
    				if(eles[i].weit>eles[j].weit&&m[i]<m[j]+1&&eles[i].inte<eles[j].inte)
    				{
    					m[i]=m[j]+1;
    					q[i]=j;
    				}
    
    				if(t<m[i])
    				{
    					t=m[i];
    					k=1;
    					//q[i]=j;
    					//printf("%d %d %d\n",i,j,t);
    				}
    
    				/*if(y<m[i])
    				{
    					q[i]=j;
    
    				printf("%d %d %d\n",i,j,t);
    				}*/
    			}
    			if(k)
    				w=i;
    		}
    
    		f=1;
    
    		//printf("%d\n",w);
    
    		printf("%d\n",t);
    		printf("%d\n",eles[w].num);
    		for(i=w;f!=t;i=q[i],f++)
    				printf("%d\n",eles[q[i]].num);
    		//printf("%d\n",eles[i].num);
    	}	
    
    	return 0;
    }
    

      

    重要的是形成路径

  • 相关阅读:
    获取从链接传来的id
    通过域名直接访问Tomcat项目解决方法
    线程与高并发
    阿里云部署javaWeb项目全过程
    前后端分离项目,支持跨域,session不丢失
    python函数
    装饰器
    迭代器和生成器
    C/C++ I/O处理
    C++虚函数
  • 原文地址:https://www.cnblogs.com/jackes/p/2450567.html
Copyright © 2020-2023  润新知