题目http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=565

分析:题目是一个01背包问题。但是增加了路径输出。
由于路径,所以才有二维递推的形式。
dp[i,j]=max{ dp[i-1,j], dp[i-1,j-m[i]]+m[i]}
​在输出集合的时候,如果dp[i,j]==dp[i-1,j],那么表明第i个物品是没有选入的。
采用的逆推的形式。
#include<stdio.h>
#include<string.h>

int C,dp[21][100000];

int main()
{
  int N,m[22];
  while (scanf("%d%d",&C,&N)!=EOF)
  {
    for(int i=1;i<=N;i++)
      scanf("%d",&m[i]);

      for(int j=0;j<=C;j++)
      {
        if(j>=m[1]) dp[1][j]=m[1];
        else        dp[1][j]=0;

      }

    //递推
    for(int i=2;i<=N;i++)
      for(int j=0;j<=C;j++)
       {
         if(j>=m[i]&&dp[i-1][j]<dp[i-1][j-m[i]]+m[i])
            dp[i][j]=dp[i-1][j-m[i]]+m[i];
         else
            dp[i][j]=dp[i-1][j];
       }
    //输出集合,倒推
    int i=N,j=C;
    while(i)
    {
      if(dp[i-1][j]!=dp[i][j])
      {
        printf("%d ",m[i]);
        j-=m[i];
      }
      i--;
    }
    printf("sum:%d\n",dp[N][C]);
  }
  return 0;
}


UVA--624 CD(01背包+路径输出)的更多相关文章

  1. UVA 624 ---CD 01背包路径输出

    DescriptionCD You have a long drive by car ahead. You have a tape recorder, but unfortunately your b ...

  2. UVA 624 - CD (01背包 + 打印物品)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  3. uva 624 CD 01背包打印路径

    // 集训最终開始了.来到水题先 #include <cstdio> #include <cstring> #include <algorithm> #includ ...

  4. UVA 624 CD (01背包)

    //路径记录方法:若是dp[j-value[i]]+value[i]>dp[j]说明拿了这个东西,标志为1, //for循环标志,发现是1,就打印出来,并把背包的容量减少,再在次容量中寻找标志: ...

  5. UVA 624 CD[【01背包】(输出路径)

    <题目链接> 题目大意: 你要录制时间为N的带子,给你一张CD的不同时长的轨道,求总和不大于N的录制顺序 解题分析: 01背包问题,需要注意的是如何将路径输出. 由于dp时是会不断的将前面 ...

  6. UVA 624 CD(01背包+输出方案)

    01背包,由于要输出方案,所以还要在dp的同时,保存一下路径. #include <iostream> #include <stdio.h> #include <stri ...

  7. uva 624 CD (01背包)

      CD  You have a long drive by car ahead. You have a tape recorder, but unfortunately your best musi ...

  8. UVA 624 CD(DP + 01背包)

    CD You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music i ...

  9. uva624 CD (01背包+路径的输出)

    CD Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Practice UVA 624 ...

随机推荐

  1. Android开发 DialogFragment对话框详解

    前言 在聊DialogFragment之前,我们看看以往我们在Android里实现一个对话框一般有这几种方式: Dialog 继承重写Dialog实现一个自定义的Dialog AlertDialog ...

  2. 给大家介绍一下linux系统高级命令

    输出重定向(mip.0834jl.com) ;覆盖文件内容 回声' 123 ' 测试;覆盖原始内容 回声' 123 ' 测试;原始存在(共存) echo 'ken2 '(www.jl0834.com) ...

  3. socket 上传文件

    """ "" server.py """服务端 """import socketimpor ...

  4. centos7 创建桌面快捷方式(chrome,eclipse)

    在将eclipse-SDK-3.7.2-Linux-gtk.tar.gz解压到某个目录下之后,命令行进行如下编辑 vi /usr/share/applications/eclipse.desktop ...

  5. day23_5_练习_Calculator_使用正则表达式计算复杂表达式

    #!/usr/bin/env python# -*- coding:utf-8 -*-# ------------------------------------------------------- ...

  6. day22_2-sys模块

    # ********************day22_2-sys模块 *******************# ********************day22_2-sys模块 ********* ...

  7. day 69 Django基础五之django模型层(一)单表操作

    Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现 ...

  8. Tomcat的8080、8005、8009端口

    8080是http 1.1 connector,也就是接收处理http请求的端口,如果你只用一个tomcat处理所有请求,可以只使用这个connector. 8005是 tomcat接受关闭指令的端口 ...

  9. Spring中AOP的实现

    Spring中整合了AOP的功能,虽然有不足,没有专门做AOP框架的那么完美,但是用一用感觉还是不错的 一些概念: AOP 面向切面编程 aspect 切面/切面类(我个人认为一个真正被解耦的程序,切 ...

  10. USACO training course Checker Challenge N皇后 /// oj10125

    ...就是N皇后 输出前三种可能排序 输出所有可能排序的方法数 vis[0][i]为i点是否已用 vis[1][m+i]为i点副对角线是否已用  m+i 为从左至右第 m+i 条副对角线 vis[1] ...