Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594

POJ 1609 Tiling Up Blocks---LIS

Posted on 2009-08-27 16:30 Uriel 阅读(431) 评论(0)  编辑 收藏 引用 所属分类: POJDP
这题自己先结构体二级排序再按一重的做WA得郁闷,以为方法错了。。然后用了网上搜的一个方法,dp数组的下标直接是第几个数,后来发现自己sort有个小错,自己的方法也过了
网上的方法:
/*Problem: 1609  User: Uriel 
   Memory: 236K  Time: 16MS 
   Language: C++  Result: Accepted
*/
 

#include
<stdio.h>
#include
<string.h>

int dp[120][120],i,j,a[120][120],t,l,r;

int max(int a,int b)
{
    
return a>=b?a:b;
}


int main()
{
    
while(1)
    
{
        scanf(
"%d",&t);
        
if(t==0)break;
        memset(a,
0,sizeof(a));
        
for(i=1;i<=t;i++)
        
{
            scanf(
"%d %d",&l,&r);
            a[l][r]
++;
        }

        
for(i=1;i<=100;i++)
        
{
            
for(j=1;j<=100;j++)
            
{
                dp[i][j]
=max(dp[i-1][j],dp[i][j-1]);
                dp[i][j]
+=a[i][j];
            }

        }

        printf(
"%d\n",dp[100][100]);
    }

    printf(
"*\n");
    
return 0;
}

                

自己的方法(比较繁):
/*Problem: 1609  User: Uriel 
   Memory: 176K  Time: 32MS 
   Language: C++  Result: Accepted
*/
 

#include
<stdio.h>
#include
<stdlib.h>

int i,j,max,t,dp[10010];
struct In{
    
int l;
    
int r;
}
S[10010];

int cmp( const void *a , const void *b ) 

    
struct In *= (In *)a; 
    
struct In *= (In *)b; 
    
if(c->!= d->l) return d->- c->l; 
    
else return d->- c->r; 
}
 

int main()
{
    
while(1)
    
{
        scanf(
"%d",&t);
        
if(t==0)break;
        
for(i=1;i<=t;i++)
        
{
            scanf(
"%d %d",&S[i].l,&S[i].r);
        }

        qsort(
&S[1],t,sizeof(S[1]),cmp);
        dp[
0]=0;
        S[
0].r=0;
        max
=0;
        
for(i=1;i<=t;i++)
        
{
            dp[i]
=1;
            
for(j=0;j<i;j++)
            
{
                
if(S[i].r<=S[j].r && dp[j]+1>dp[i])
                
{
                    dp[i]
=dp[j]+1;
                }

                
if(dp[i]>max)max=dp[i];
            }

        }

        printf(
"%d\n",max);
    }

    printf(
"*\n");
    
return 0;
}




只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理