zoukankan      html  css  js  c++  java
  • hdoj1160【DP】

    现在还很弱,贴一个我bin的结题报告日后写到一定会了加油
    说说感觉,读题不读好,然后读完想不出,知道是dp不好好想,先排序一列,再求另一列,dp[ i ]代表长度,那么需要输出整个序列需要路径和一个标志性的下标。以及原来的下标,这么说要用结构体。DP的具体细节也是决定怎么dp的。
    http://www.cnblogs.com/kuangbin/archive/2011/08/04/2127944.html

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    const double eps=1e-5;
    const double pi=acos(-1.0);
    const int mod=1e9+7;
    const int INF=0x3f3f3f3f;
    //dp[i]表示以第i个数据结尾的符合要求的子列长度
    const int N=1e3+7;
    
    struct asd{
        int w,s;
        int indxe;
    };
    asd q[N];
    
    bool cmp(asd z,asd x)
    {
        if(z.w<x.w) return 1;
        else if(z.w==x.w&&z.s>x.s) return 1;
        return 0;
    }
    int dp[N];
    int pre[N];
    int res[N];
    
    int main()
    {
        int i=1,j;
        while(scanf("%d%d",&q[i].w,&q[i].s)!=EOF){
            dp[i]=1;
            pre[i]=0;
            q[i].indxe=i;
            i++;
        }
        int n=i-1;
        sort(q,q+n+1,cmp);
        int maxlen=0;
        int maxi;
        dp[1]=1;
        for(i=1;i<=n;i++){
            for(j=1;j<i;j++)
            if(q[i].w>q[j].w&&q[i].s<q[j].s&&dp[j]+1>dp[i]){
                dp[i]=dp[j]+1;
                pre[i]=j;
                if(dp[i]>maxlen){
                    maxi=i;
                    maxlen=dp[i];
                }
            }
        }
        int t=maxi;
        i=0;
        while(t!=0){
            res[i++]=t;
            t=pre[t];
        }
        printf("%d
    ",i);
        while(i>0){
            i--;
            printf("%d
    ",q[res[i]].indxe);
        }
        return 0;
    }
  • 相关阅读:
    把ssl模块加入到已经编译好的apache中实现HTTPS
    六,集合
    一. 计算机语言基础知识:
    三, 字符串
    四,列表的使用方法
    hash()函数的用法
    五,字典用法总结
    十,编码
    七八九,条件和循环语句
    二.Python的基础语法知识
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934445.html
Copyright © 2011-2022 走看看