pta l3-1(凑零钱)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805054207279104
题意:给定n枚硬币的面值,需要支付金额m,求能否恰好支付,若能,输出最小序列,若不能输出No Solution
思路:很容易看出这是一个完全背包问题,把每枚硬币的体积视为其面值,价值也视为其面值,则题目就转换成在背包空间为m时能否刚好装满,用dp[i][j]表示前i枚硬币装在空间为j的背包中最大价值。但题目的难点在于需要输出最小序列,我们可以这样做,输入数据之后按降序排列,然后从i=1到i=n进行dp,然后输出从i=n到i=1回溯,这样的结果自然就是序列最小的。还有一点需要注意的就是:
if(dp[j]<=dp[j-a[i]]+a[i])
dp[j]=dp[j-a[i]]+a[i],b[i][j]=true;
这里必须是‘<=',这样才能保证序列最小。
AC代码:
#include<bits/stdc++.h>
using namespace std; const int maxn=;
int a[maxn],dp[],res[maxn],k,n,m;
bool b[maxn][]; bool cmp(int x,int y){
return x>y;
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
scanf("%d",&a[i]);
sort(a+,a+n+,cmp);
for(int i=;i<=n;++i)
for(int j=m;j>=a[i];--j)
if(dp[j]<=dp[j-a[i]]+a[i])
dp[j]=dp[j-a[i]]+a[i],b[i][j]=true;
if(dp[m]!=m)
printf("No Solution\n");
else{
int v=m,t=n;
while(v){
if(b[t][v]){
res[k++]=a[t];
v-=a[t];
}
--t;
}
printf("%d",res[]);
for(int i=;i<k;++i)
printf(" %d",res[i]);
printf("\n");
}
return ;
}
pta l3-1(凑零钱)的更多相关文章
- L3-001. 凑零钱
L3-001. 凑零钱 题目链接:https://www.patest.cn/contests/gplt/L3-001 动态规划 这道题一看就知道应该用背包思想来做,不过想了好久没什么思路(dp实在是 ...
- L3-001. 凑零钱(dfs或者01背包)
L3-001. 凑零钱 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现 ...
- 团体天梯赛 L3-001. 凑零钱
L3-001. 凑零钱 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现 ...
- 天梯赛L3-001. 凑零钱(01背包记录物品)
L3-001. 凑零钱 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现 ...
- PTA 凑零钱(深度优先搜索)
韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 10000 枚来自各个星球的硬币,需要请你帮她盘算 ...
- L3-001 凑零钱 (30 分) dfs加后缀剪枝
韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 1 枚来自各个星球的硬币,需要请你帮她盘算一下,是 ...
- PAT L3-001 凑零钱(01背包dp记录路径)
韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有104枚来自各个星球的硬币,需要请你帮她盘算一下,是 ...
- DP:凑零钱问题/最长非降子序列(C++)
你给出一定数额的钱 i 元给我,我利用手中的硬币(m元, j元, k元...)兑换等值的钱给你,要求硬币数最少. 举例:给出1-11的钱,手中硬币有1元,3元,5元. 重点是找到状态和状态转移方程. ...
- 浙大PAT CCCC L3-001 凑零钱 ( 0/1背包 && 路径记录 )
题目链接 分析 : 就是一个 0/1 背包,但是需要记录具体状态的转移情况 这个可以想象成一个状态转移图,然后实际就是记录路径 将状态看成点然后转移看成边,最后输出字典序最小的路径 这里有一个很巧妙的 ...
随机推荐
- Mybatis五(一级二级缓存、第三方缓存)
一级缓存 Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言.所以在参数和SQL完全一样的情况下,我们使用同一个SqlSess ...
- hive 测试
hive> use gamedw;OKTime taken: 0.049 secondshive> select current_database();OKgamedwTime taken ...
- 转载:approxPolyDP函数
本文转载http://blog.csdn.net/qq_18343569/article/details/47999257 1.approxPolyDP函数 函数的作用: 对图像轮廓点进行多边形拟合 ...
- 白鹭引擎 - 本地坐标和舞台坐标的转化 ( globalToLocal, localToGlobal )
class Main extends egret.DisplayObjectContainer { /** * Main 类构造器, 初始化的时候自动执行, ( 子类的构造函数必须调用父类的构造函数 ...
- Linux 文件查找(find)
find(选项)(参数) 选项 -amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算: -anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存 ...
- 图像识别___YUV学习手记
视觉专家很早以前就知道,人眼对亮度分辨率的敏感度高于对色彩分辨率的敏感度. 这就是早期模拟和数字压缩形式的主要动因.视频信号会分解为亮度和色度,这两个是组成色彩的元素,这类似于图像可以分解为红.绿.蓝 ...
- beego生成 api 项目 && api 文档
目标 生成 api 项目,并且自动生成db的mapper.module等:同时生成api文档 操作步骤 1.生成 api 项目,并且自动生成db全表的映射 bee api [projectName] ...
- 数据结构:Stack
Stack设计与实现 Stack基本概念 栈是一种 特殊的线性表 栈仅能在线性表的一端进行操作 栈顶(Top):允许操作的一端 栈底(Bottom):不允许操作的一端 Stack的常用操作 创建栈 销 ...
- 使用大于16TB的ext4文件系统
我们的电脑想要快速开机,需要具备三个条件:第一是主板支持UEFI,二是系统支持UEFI(Win8),最后就硬盘需要采用GPT分区. GPT分区全名为Globally Unique Identifier ...
- linux 时间相关的一些总结
仅作为内核代码中时间管理模块的笔记,3.10内核,很乱,不喜勿喷. 先有time,后有timer. 常用的time结构有哪些?除了大名鼎鼎的jiffies和jiffies64之外,还有常用的一些结构如 ...