题目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;
}


最新文章

  1. Python黑帽编程 3.3 MAC洪水攻击
  2. UIScrollView和delegate的通信
  3. reference
  4. C++11新特性总结 (一)
  5. CocoaPods安装以及相关问题解决
  6. linux笔记六-------文件权限设置
  7. [PCL]4 PCL中图像匹配的几个类图
  8. Watch The Movie
  9. localhost访问不了
  10. win7建立无线wifi热点的几个常见的问题
  11. mysql初学
  12. IEnumerable实践应用
  13. AVFoundation自定义录制视频
  14. Python 的黏包问题
  15. Ubuntu 14.04 LTS 火狐浏览器中,鼠标选择文字被删除的解决办法
  16. arduino 串口数据啊按字节分析
  17. 【LOJ】#2275. 「JXOI2017」颜色
  18. active admin常用配置
  19. Python之匿名函数(filter,map,reduce)
  20. JQ 知识点集合

热门文章

  1. pop&amp;dismiss
  2. css----less预处理器
  3. SpringCloudBus
  4. 日志框架一logback配置和使用
  5. 各种版本mysql驱动包下载地址
  6. (转)谈谈Android中的Rect类——奇葩的思维
  7. iOS开发之SceneKit框架--SCNAction.h
  8. hexo next中遇到的bug,引发出的关于jquery中click()函数和on("click",function())的区别
  9. npm使用入门
  10. LightOJ-1007-Mathematically Hard-欧拉函数打表+前缀和+预处理