浙大PAT CCCC L3-001 凑零钱 ( 0/1背包 && 路径记录 )
分析 :
就是一个 0/1 背包,但是需要记录具体状态的转移情况
这个可以想象成一个状态转移图,然后实际就是记录路径
将状态看成点然后转移看成边,最后输出字典序最小的路径
这里有一个很巧妙的做法
先将所有的硬币升序排序(这一点很重要)
然后在这一条件下,假设当前状态是考虑第 i 个硬币,前一个状态是考虑第 i-1 个硬币
试想对于同一个体积,如果选用的硬币数量越多是不是字典序更小
然后对于如果对于同一体积下,选用硬币数一样多的两种方案
由于我们已经升序排序,如果有一样多硬币的情况,那么永远选后面面值大的更新答案
因为体积固定嘛,那么后面选用的硬币面值更大,凑成一样的体积,是不是说明
其他的选用硬币应该更小,也就是字典序更小了?
#include<bits/stdc++.h>
using namespace std;
;
const int INF = 0x3f3f3f3f;
struct Status{ int Coin, Pre; }st[maxn];///记录状态
int dp[maxn], Coin[maxn];
int N, M;
int main(void)
{
while(~scanf("%d %d", &N, &M)){
; i<N; i++)
scanf("%d", &Coin[i]);
sort(Coin, Coin+N);
; i<=M; i++)
st[i].Coin = st[i].Pre = -,
dp[i] = -INF;///初始化为负无穷小,对于背包是否刚刚好装满
///一般都选择这样初始化
dp[] = ;
; i<N; i++){
for(int j=M; j>=Coin[i]; j--){
>= dp[j]){///对于 == 的情况,可以去用题目给的第一个样例,
///然后去掉这个等号输出答案,再想一下为什么错了,可能理解就更多了
dp[j] = dp[j - Coin[i]] + ;
st[j].Coin = Coin[i];///记录当前状态是选了哪个硬币
st[j].Pre = j - Coin[i];///记录从哪个状态转移过来
}
}
}
){
vector<int> ans;
int now = M;
){///倒序回复路径
ans.push_back(st[now].Coin);
now = st[now].Pre;
}
; i>=; i--){///倒序输出倒序路径就是正确路径了
printf("%d", ans[i]);
) putchar(' ');
}puts("");
}else puts("No Solution");
}
;
}
浙大PAT CCCC L3-001 凑零钱 ( 0/1背包 && 路径记录 )的更多相关文章
- 天梯赛L3-001. 凑零钱(01背包记录物品)
L3-001. 凑零钱 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现 ...
- PAT 天梯赛 L3-001. 凑零钱 【DP】【DFS】
题目链接 https://www.patest.cn/contests/gplt/L3-001 思路 DP[I][J] I 表示第几个物品 J 表示多少钱 dp[i][j] 为 bool 值 表示 当 ...
- 浙大PAT CCCC L3-013 非常弹的球 ( 高中物理题 )
题目链接 题意 : 刚上高一的森森为了学好物理,买了一个“非常弹”的球.虽然说是非常弹的球,其实也就是一般的弹力球而已.森森玩了一会儿弹力球后突然想到,假如他在地上用力弹球,球最远能弹到多远去呢?他不 ...
- 浙大PAT CCCC L3-014 周游世界 ( 最短路变形 )
题目链接 题意 : 中文题请点链接,挺复杂的... 分析 : 乍一看是个最短路,实际就真的是个最短路.如果没有 “ 在有多条最短路径的时候输出换乘次数最少的” 这一条件的约束,那么这题就是直接建图然后 ...
- 浙大PAT CCCC L3-015 球队“食物链” ( 搜索 && 剪枝 )
题目链接 题意 : 有 n 个球队,给出主客场胜负图,找出一个序列 1.2.3..... 使得 1 战胜过 2 .2 战胜过 3.3 战胜过 4..... n 战胜过 1 ( 这个序列是 1~n 的其 ...
- PAT L3-001 凑零钱(01背包dp记录路径)
韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有104枚来自各个星球的硬币,需要请你帮她盘算一下,是 ...
- L3-001. 凑零钱(dfs或者01背包)
L3-001. 凑零钱 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现 ...
- L3-001. 凑零钱
L3-001. 凑零钱 题目链接:https://www.patest.cn/contests/gplt/L3-001 动态规划 这道题一看就知道应该用背包思想来做,不过想了好久没什么思路(dp实在是 ...
- 浙大pat 1035题解
1035. Password (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To prepare f ...
随机推荐
- 基于element表格的合并多个行实例
官方示例地址:https://github.liubing.me/lb-element-table/zh/guide/ 效果图: 0.下载lb-table 并引入 import LbTable fro ...
- python 有参数的装饰器
怎么样为装饰器加参数 import time current_user = {'user':None} def auth(engine = "file") def deco(fun ...
- [转帖] 国产x86-海光禅定 2018年营收过亿?
中科曙光:全年业绩稳健,海光芯片营收过亿 X86服务器市场Intel占据绝对优势:X86处理器已经成为全球最广泛使用的处理器架构之一,尤其是在PC和服务器领域,其中在处理器市场的份额高达90%以上.中 ...
- 索引之----mysql单列索引失效的情况
使用的索引名称: 1.隐式转换导致索引失效. 由于表字段定义为vachar类型,但在查询时把该字段作为number类型 以及where条件传给mysql. 2.对索引列进行任何操作(计算(+.-.*. ...
- [洛谷P4183][USACO18JAN]Cow at Large P
题目链接 Bzoj崩了之后在洛谷偶然找到的点分好题! 在暴力的角度来说,如果我们$O(n)$枚举根节点,有没有办法在$O(n)$的时间内找到答案呢? 此时如果用树形$dp$的想法,发现是可做的,因为可 ...
- 實現QQ第三方登錄
<?php // 写几个函数,分别用于获取code,token,openid,用户信息 // 跳转到QQ授权登录页面 function code(){ $response_type='code' ...
- 从入门到自闭之python三大器--装饰器
开放封闭原则:在不修改源代码及调用方式,对功能进行额外添加就是开放封闭原则 开放:对代码的扩展进行开发 封闭:修改源代码 装饰(额外功能) 器:工具(函数) 普通版: # print(time.tim ...
- 深入解析Vue.js中v-bind v-model的使用和区别
v-model 指令在表单控件元素上创建双向数据绑定,所谓双向绑定,指的就是我们在js中的vue实例中的data与其渲染的dom元素上的内容保持一致,两者无论谁被改变,另一方也会相应的更新为相同的数据 ...
- LVS实现负载均衡原理及安装配置 负载均衡
LVS实现负载均衡原理及安装配置 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F ...
- iOS-NSLog发布时取消打印日志
1 选择工程的Target -> Build Settings -> Preprocessor Macros. 如图,默认 Debug项,是“DEBUG=1”. 2 在程序中设置全局宏定义 ...