zoukankan      html  css  js  c++  java
  • 【DP】UVA 624 CD 记录路径

    开一个数组p

    若dp[i-1][j]<dp[i-1][j-a[i]]+a[i]时就记录下p[j]=a[i];表示此时放进一个轨道

    递归输出p


    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <limits.h>
    #include <malloc.h>
    #include <ctype.h>
    #include <math.h>
    #include <string>
    #include<iostream>
    #include <algorithm>
    using namespace std;
    #define MAXN 11111
    #include <queue>
    #include <vector>
    #define IN freopen("in.txt","r",stdin);
    int a[30],dp[30][MAXN],p[MAXN];
    void out(int x)
    {
        if(x==0)
            return ;
        else    out(x-p[x]);
        printf("%d ",p[x]);
    }
    int main()
    {
        int n,m;
       // IN;
        while(scanf("%d%d",&m,&n)!=EOF)
        {
            memset(dp,0,sizeof(dp));
            memset(p,0,sizeof(p));
            scanf("%d",&n);
            for(int i=1; i<=n; i++)
                scanf("%d",&a[i]);
            for(int i=1; i<=n; i++)
            {
                for(int j=m; j>0; j--)
                {
                    if(j>=a[i]&&dp[i-1][j]<dp[i-1][j-a[i]]+a[i])
                        dp[i][j]=dp[i-1][j-a[i]]+a[i],p[j]=a[i];
                    else
                        dp[i][j]=dp[i-1][j];
                }
            }
            int i;
            for(i=m;i>=0;i--)
                if(dp[n][i]>dp[n][i-1])
                    break;
            out(i);
            printf("sum:%d
    ",dp[n][m]);
        }
        return 0;
    }
    


  • 相关阅读:
    JAVA this
    JAVA static关键字
    子类实例化 super
    TCP/IP概述
    Java多态
    植物大战僵尸:寻找阳光掉落Call调用
    JVM总结+个人整理补充--转
    已知微分方程通解求微分方程
    Redis安装过程中的问题
    对称阵和反对称阵
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7271961.html
Copyright © 2011-2022 走看看