শনিবার, ১৭ জুন, ২০১৭

UVA 231 - Testing the CATCHER

#include<bits/stdc++.h>
using namespace std;
#define mx 100005
long value[100005];
long  dp[mx],dir[mx];
long longest(long u)
{
    if(dp[u]!=-1) return dp[u];
    long maxi=0;
    for(long v=u-1; v>=0; v--)
    {
        if(value[v]>value[u])
        {
            if(longest(v)>maxi)
            {
                maxi=longest(v);
                dir[u]=v;

            }
        }
    }
    dp[u]=1+maxi;
    return dp[u];
}
int main()
{
    long n,cs=1;
    while(cin>>n)
    {
        long k=0;
        if(n==-1)
            break;
        else
            value[k++]=n;
        while(cin>>n)
        {
            if(n==-1)
                break;
            else
                value[k++]=n;
        }
        memset(dp,-1,sizeof dp);
        memset(dir,-1,sizeof dir);
        int LIS=0,start;
        for(int i=k-1; i>=0; i--)
        {
            if(longest(i)>LIS)
            {
                LIS=longest(i);
                start=i;
            }
        }
        if(cs!=1)
            printf("\n");
        printf("Test #%ld:\n  maximum possible interceptions: %ld\n",cs++,LIS);
    }
    return 0;
}


কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন

Factorization with prime Sieve

vector <int> prime; char sieve[1000009]; int N=1000009; void primeSieve ( ) { sieve[0] = sieve[1] = 1; prime.push_back(2); ...