zoukankan      html  css  js  c++  java
  • hdu1087 dp

    我思维比较差,平时也不敢碰dp,但是没办法必须学。这题虽然做了很久,修修改改很久,但是最后做出了,还是很好地。

    对于如果a[j]>a[i],并且j>i,那么i能跳到j,那dp[j]=max(dp[i]+a[j],dp[j]);如果不能跳转dp[j]=max(dp[j],a[j]);保证dp[j]最大。

    #include<stdio.h>
    #include<string.h>
    #define maxn 1100
    int max(int x,int y)
    {
        return x>y?x:y;
    }
    int main()
    {
        int i,j,n,dp[maxn],a[maxn];
        while(scanf("%d",&n)!=EOF)
        {
            if(!n)break;
            for(i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
                dp[i]=a[i];
            }
            dp[0]=0;
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                {
                    if(a[i]<a[j]&&j>i)//从i跳到j
                    {
                        dp[j]=max(dp[i]+a[j],dp[j]);
                    }
                    else 
                        dp[j]=max(dp[j],a[j]);//不能跳转 选取最大的。
                }
            int ans=-999999;
            for(i=1;i<=n;i++)
                if(dp[i]>ans)
                    ans=dp[i];
            printf("%d
    ",ans);
        }
    }
  • 相关阅读:
    视图
    触发器
    DNS
    DHCP
    SSH 详解
    apt-get
    java split
    数组指针 指针数组
    函数指针
    网络协议
  • 原文地址:https://www.cnblogs.com/sweat123/p/4745590.html
Copyright © 2011-2022 走看看