题目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. iOS开发系列-打印内存地址

    打印内存地址 基本数据类型 定义一个基本数据类型,会根据变量类型分配对应的内存空间.比如定义一个int类型的变量a. int a = 10; 内存如下 输入变量a在内存中内存地址 NSLog(@&qu ...

  2. vba取局域网电脑共享文件夹下的Excel文件

    Private Sub CommandButton1_Click()    Dim xlapp1 As Excel.Application    Dim xlbook1 As Excel.Workbo ...

  3. xampp只允许本地访问,禁止远程访问

    远程访问phpmyadmin的时候出现错误 New XAMPP security concept: Access to the requested object is only available f ...

  4. windwos下的转excel到PDF并预览的工具,有Aspose,Spire,原生Office三种方式

    SchacoPDFViewer 项目链接:https://github.com/tiancai4652/SchacoPDFViewer/tree/master 主要实现了对于Excel文件转换PDF, ...

  5. Perl 数据类型

    Perl 数据类型 Perl 是一种弱类型语言,所以变量不需要指定类型,Perl 解释器会根据上下文自动选择匹配类型. Perl 有三个基本的数据类型:标量.数组.哈希.以下是这三种数据类型的说明: ...

  6. xkl的各种沙雕低错

    13,特判判掉20分算不算? 12,linux用c++11编译: g++ -std=c++11 -o a a.cpp g++ a.cpp -std=c++11 -o a //g++ a.cpp -st ...

  7. Markdown转义字符表

  8. NOIP2016 解题报告

    D1T1 玩具谜题 xjb模拟即可 #include<bits/stdc++.h> #define N (100000+5) using namespace std; inline int ...

  9. tp5 mkdir() 没有权限

  10. STM32 解析futaba S-bus协议

    S-bus为futaba使用的串行通信协议.实际上为串口通信.但是有几点需要注意: 在大端小端上,网上资料都说的不是很清楚: 跟TTL串口信号相比,S-bus的逻辑电平是反的,需用如下电路对电平反相, ...