UVA624
给你一个序列,让你从其中选出一些数,然后得到最接近题目所给的一个数,并需要输出所选的数
考察o1背包容量是从大到小容量减少的方式来进行装入的,
路径记录,感觉好题啊
初始化为求正好放满的模型

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=10001;
int w[30],dp[maxn];
bool mp[maxn][30];
int sum,n;
int main()
{while(scanf("%d%d",&sum,&n)!=EOF){memset(mp,0,sizeof(mp));memset(dp,0,sizeof(dp));for(int i=0;i<n;i++) scanf("%d",&w[i]);for(int i=0;i<n;i++)for(int j=sum;j>=w[i];j--){dp[j]=max(dp[j],dp[j-w[i]]+w[i]);if(dp[j]==(dp[j-w[i]]+w[i]))mp[j][i]=true;}for(int i=n-1,j=sum;i>=0;i--){if(mp[j][i]){printf("%d ",w[i]);j-=w[i];}}printf("sum:%d\n",dp[sum]);}return 0;
}
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
#include<queue>
#include<iostream>
using namespace std;
int dp[111000],vis[50][111000];
int f[50],k=0,w[50];
void prime(int n,int m)
{if(n==0||m<0)return;if(vis[n][m]==0)prime(n-1,m);else{prime(n-1,m-w[n]);f[k++]=w[n];;}
}
int main()
{int m,n,i,j;while(scanf("%d",&m)!=EOF){memset(w,0,sizeof(w));scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&w[i]);}memset(dp,0,sizeof(dp));memset(vis,0,sizeof(vis));for(i=1;i<=n;i++){for(j=m;j>=w[i];j--){if(dp[j]<dp[j-w[i]]+w[i]){dp[j]=dp[j-w[i]]+w[i];vis[i][j]=1;}}}k=0;memset(f,0,sizeof(f));prime(n,m);for(i=0;i<k;i++)printf("%d ",f[i]);printf("sum:%d\n",dp[m]);}return 0;
}

【UVA624 01背包中的路径问题】相关推荐

  1. 416. 分割等和子集 - 01背包中判断是否装满的问题

    ✅01背包中是"否能装满"的问题 如果能把数组分割成两个子集且使得子集的元素和相等,那么证明该集合的元素总和必须要是能被2整除的,这是一个前提条件 假设总和为sum,那问题就转化成 ...

  2. 494. 目标和 - 01背包中装满背包有几种方法的问题

    ✅01背包中"装满背包有几种方法"的问题 这道题难就难在如何把题面转化为背包问题

  3. 01背包中背包装满和不装满

    背包: 有n 种不同的物品,每个物品有两个属性,v体积,c价值,现在给一个体积为 m 的背包,问最多可带走多少价值的物品.       状态转移方程  dp[i][j]=max(dp[i-1][j], ...

  4. 01背包中是否背包装满问题

    背包: 有n 种不同的物品,每个物品有两个属性,v体积,c价值,现在给一个体积为 m 的背包,问最多可带走多少价值的物品.       状态转移方程  dp[i][j]=max(dp[i-1][j], ...

  5. 【HDU1203 HDU2955 01背包中的简单概率问题处理】

    HDU1203 Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了. 要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的.Sp ...

  6. 背包问题教程-01背包,完全背包,多重背包,混合背包 收藏

    P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...

  7. 目标和(01背包应用)

    给你一个整数数组 nums 和一个整数 target . 向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums = [2, 1] ,可以在 2 ...

  8. 动态规划-----------01背包,完全背包与多重背包

    P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...

  9. 对01背包的分析与理解(图文)

    首先谢谢Christal_R的文章(点击转到链接)让我学会01背包 本文较长,但是长也意味着比较详细,希望您可以耐心读完. 题目: 现在有一个背包(容器),它的体积(容量)为V,现在有N种物品(每个物 ...

最新文章

  1. linux下接口持续集成,部署jenkins持续集成工具
  2. 微信(WeChat)电脑端多开
  3. python对文件的读操作方法有哪些-Python文件常用操作方法
  4. php 的函数参数值类型限定
  5. 使用tracee编写规则追踪系统安全事件
  6. 【转载】SAP物料账未分摊差异分析
  7. 用户 Outlook 2007 附件突然不能预览,在国外网站找了解决方案。
  8. Elasticsearch-kopf导览
  9. WEG的完整形式是什么?
  10. fedora 编译安装mysql_Fedora 下编译安装安装基于Lighttpd+PHP5+MySQL5
  11. 十大经典排序算法动画演示
  12. nsfilemanager
  13. matlab 工具函数、matlab toolbox(工具箱)
  14. 网络之路——交换机基础篇
  15. java优化 pdf_Java性能优化权威指南 PDF扫描[132MB]
  16. T6企业管理软件 5.1 - 导出单据列表显示“数据库已达到最大值”“创建临时表失败”
  17. 完整的连接器设计手册_连接器设计中,仿真技术提供了力学理论依据
  18. android 自动 创建文件夹,android - 如何在SD卡上自动创建目录
  19. B端和C端产品主要差异:用户、体验、数据
  20. 泰山OFFICE技术讲座:Times New Roman的kerning研究

热门文章

  1. [物理学与PDEs]第4章习题3 一维理想反应流体力学方程组的数学结构
  2. 同一服务器 数据库间 不同表 的查询
  3. step by step设置postgresql用户密码并配置远程连接
  4. SQL Server2005重装Performance Monitor Counter 的问题解决
  5. ASP.NET MVC 2
  6. 高通 8x12 添加 TP和按键
  7. 不动产登记进入倒计时 哪些房子必须要卖掉?
  8. esp8266 lcd 天气_8266WIFI加LCD显示时间及天气pm25
  9. vc 显示非模态对话框
  10. Google虚拟现实游戏 Ingress 邀请码一枚(已领)