UVA 624 CD(01背包,要记录路径)
题意:
有n张CD(n<=20),每张能播放的时长不同。给定一个时长限制t,挑出部分的CD使得总播放时间最长。顺便输出路径!
思路:
重点在输出路径,否则这题很普通。那就要用二维数组记录每个CD是否要携带了,开个二维bool记录即可,位置就跟dp数组一样的,然后根据带或不带,来决定上一件物品在那个格子中。带了就在上一行的j-价值中,不带就在上一行的j中。
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int N=;
int track[N];
int dp[N][];
bool path[N][]; void DFS(int n,int t)
{
if(t==)
return;
if(path[t][n]==true)
{
DFS( n-track[t-], t-);
printf("%d ",track[t-]);
}
else
DFS(n, t-);
} int cal(int n, int t)
{
for(int i=; i<t; i++)
{
for(int j=; j<track[i]; j++)//必要的,不然全是0
dp[i+][j] = dp[i][j]; for(int j=track[i]; j<=n; j++)
{
if( dp[i][j-track[i]]+track[i] >= dp[i][j] )
{
dp[i+][j] = dp[i][j-track[i]]+track[i];
path[i+][j]=true;
}
else dp[i+][j] = dp[i][j];
}
}
DFS( n, t);//递归输出路径
printf("sum:%d\n", dp[t][n]);
return ;
}
int main()
{
//freopen("input.txt","r",stdin);
int n, t;
while(cin>>n>>t)
{
memset(track,,sizeof(track));
memset(dp,,sizeof(dp));
memset(path, , sizeof(path)); int cnt=;
for(int i=; i<t; i++)
{
scanf("%d",&track[i]);
cnt+=track[i];
}
if(cnt<=n)//全部都能带的情况
{
for(int i=; i<t; i++)
printf("%d ", track[i]);
printf("sum:%d\n",cnt);
}
else cal(n, t);
}
return ;
}
AC代码
UVA 624 CD(01背包,要记录路径)的更多相关文章
- UVA 624 ---CD 01背包路径输出
DescriptionCD You have a long drive by car ahead. You have a tape recorder, but unfortunately your b ...
- UVA 624 - CD (01背包 + 打印物品)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- uva 624 CD 01背包打印路径
// 集训最终開始了.来到水题先 #include <cstdio> #include <cstring> #include <algorithm> #includ ...
- UVA 624 CD (01背包)
//路径记录方法:若是dp[j-value[i]]+value[i]>dp[j]说明拿了这个东西,标志为1, //for循环标志,发现是1,就打印出来,并把背包的容量减少,再在次容量中寻找标志: ...
- PAT L3-001 凑零钱(01背包dp记录路径)
韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有104枚来自各个星球的硬币,需要请你帮她盘算一下,是 ...
- 训练指南 UVA - 11374(最短路Dijkstra + 记录路径 + 模板)
layout: post title: 训练指南 UVA - 11374(最短路Dijkstra + 记录路径 + 模板) author: "luowentaoaa" catalo ...
- uva 624 CD (01背包)
CD You have a long drive by car ahead. You have a tape recorder, but unfortunately your best musi ...
- UVA 624 CD(01背包+输出方案)
01背包,由于要输出方案,所以还要在dp的同时,保存一下路径. #include <iostream> #include <stdio.h> #include <stri ...
- 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 ...
- UVA624 CD,01背包+打印路径,好题!
624 - CD 题意:一段n分钟的路程,磁带里有m首歌,每首歌有一个时间,求最多能听多少分钟的歌,并求出是拿几首歌. 思路:如果是求时常,直接用01背包即可,但设计到打印路径这里就用一个二维数组标记 ...
随机推荐
- 计算机网络HTTP、TCP/IP包
参考: TCP-IP数据包结构详解 HTTP报文格式详解 Http协议报文格式 HTTP请求/响应报文结构 [Java知识]GET和POST请求的区别
- 扩展thinkphp5的redis类方法
笔者在开发时发现,thinkphp5的自带redis类方法,只有简单的读取缓存.写入缓存的基本方法,远不能满足我们业务的需求.redis本身支持五种数据类型,string(字符串).hash(哈希). ...
- UVaLive 3266 Tian Ji -- The Horse Racing (贪心)
题意:田忌赛马,每胜一局就得200,负一局少200,问最多得多少钱. 析:贪心,如果最快的马比齐王的还快,就干掉它,如果最慢的马比齐王的马快,就干掉它,否则用最慢的马去和齐王最快的马比. 代码如下: ...
- 493. Reverse Pairs(BST, BIT, MergeSort)
Given an array nums, we call (i, j) an important reverse pair if i < j and nums[i] > 2*nums[j] ...
- CentOS 安装Perl环境
参考博文:https://blog.csdn.net/weixin_40192129/article/details/78610974 vmware tools需要perl环境的支持 安装perl支持 ...
- 51nod 1562 玻璃切割
1562 玻璃切割 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1562 题目来源: CodeForces 基准时间 ...
- axios发送两次请求原因及解决方法
axios发送两次请求原因及解决方法 最近Vue项目中使用axios组件,在页面交互中发现axios会发送两次请求,一种请求方式为OPTIONS,另外一种为自己设置的. 如图: 什么是CORS通信? ...
- js框架:angularJs
AngularJS是一个javascript框架,是一个以JavaScript编写的库,可通过<script>标签添加到HTML页面 AngularJS使得开发现代的单一页面应用程序(SP ...
- Tomcat 指定jdk
Windows 下 修改 tomcat根目录/bin/setclasspath.bat 文件 如下: rem Otherwise either JRE or JDK are fine set JAVA ...
- [软件工程基础]Alpha 展示博客
团队成员 个人简介 个人简介参照团队介绍博客. 个人博客 王嘉睿爵:http://www.cnblogs.com/whynotRW/ 游心:http://www.cnblogs.com/jefhq/ ...