问题描述:

有n个砝码,将砝码从大到小排列,从第三个砝码开始,所有砝码均大于其前两个砝码之和,问怎样的砝码组合才可以组合出不大于c的最大重量,输出该重量

输入:

第一行输入两个个整数N,c,代表有N个砝码,第二行输入N个砝码的质量

输出:

不大于c的最大重量

题目分析:

要找到不大于c的最大重量,要不断逼近c,按贪心算法来讲,肯定是先拿最大的,然后在拿小的,因为小质量的砝码更可以做到逼近而不超过,但这样任然有很多组合,要找到最优的组合,可以利用dfs搜索所有组合,仔细想想这种砝码用了由于超过c而被舍弃的砝码可能会被再次利用吗,肯定可以再次利用,那么理应使用vis标记,但我试了下把vis删去居然也可以AC,我人傻了,难道所有的测试用例都可以贪心+暴力,不理解,但仔细想想好像也是,我们在循环部分,也是从大到小用砝码的没有回去用的。。。

#include<bits/stdc++.h>
using namespace std;
long long int n,c,ans=0,x;
long long int a[1999],summ[1999];
bool vis[1999]; void dfs(int cnt,long long int mm){
vis[cnt+1]=1; //剪枝1:质量和不能大于c
if(mm>c)return; //剪枝2:此时前面所有数之和还小于ans,也没必要继续搜索了
if(mm+summ[cnt]<=ans)return; if(ans<mm)ans=mm;//比较ans与现选数之和 if(mm+summ[cnt]<=c&&mm+summ[cnt]>=ans){
//此数之后全选的情况,与现ans比较
ans=mm+summ[cnt];
return;
} //注意这里的cnt会随递归函数变化
for(int i=cnt;i>=1;i--){
if(vis[i]==0){
dfs(i-1,mm+a[i]);//正常的dfs ,从最大的砝码开始增加
flag[i]=0;
}
}
}
int main(){
cin>>n>>c;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]>c)break;//大于c的数不计入数组
//记录前缀和
summ[i]=summ[i-1]+a[i];
//记录使用砝码数量
x++;
}
dfs(x,0);
cout<<ans;
return 0;
}

dfs与贪心算法——洛谷5194的更多相关文章

  1. 【贪心】洛谷2019 OI春令营 - 普及组 作业

    [P3817 小A的糖果 小A有N个糖果盒,第i个盒中有a[i]颗糖果. 小A每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中加起来都只有x颗或以下的糖果,至少得吃掉几颗糖. [贪 ...

  2. 差分约束算法————洛谷P4878 [USACO05DEC] 布局

    题目: 不难看出题意主要是给出ml+md个格式为xi-xj<=ak的不等式,xi-xj为i,j俩头牛的距离,要我们求x1-xn的最大值. 经过上下加减我们可以将这几个不等式化成x1-xn< ...

  3. 贪心思想之区间贪心 关联洛谷P1803

    力扣上也有一道类似的题 几乎是一样 输出不同 → 力扣leetcode 435. 无重叠区间 区间贪心是比较经典的 就拿洛谷P1803来举例 题目大意 n个比赛 [开始时间,结束时间] 问一个人最多能 ...

  4. 【DFS与BFS】洛谷 P1135 奇怪的电梯

    题目:奇怪的电梯 - 洛谷 (luogu.com.cn) 因为此题数据范围较小,有dfs及bfs等多种做法. DFS 比较正常的dfs,注意vis数组一定要回溯,不然会漏情况 例如这个数据 11 1 ...

  5. 【前缀和】【two-pointer】【贪心】洛谷 P3143 [USACO16OPEN]钻石收藏家Diamond Collector 题解

        解法众多的一道毒瘤题? 题目描述 奶牛Bessie很喜欢闪亮亮的东西(Baling~Baling~),所以她喜欢在她的空余时间开采钻石!她现在已经收集了\(N\)颗不同大小的钻石,现在她想在谷 ...

  6. 【贪心】洛谷P1607 [USACO09FEB]庙会班车Fair Shuttle 题解

        不是很容易写出正解的贪心问题. 题目描述 Although Farmer John has no problems walking around the fair to collect pri ...

  7. (DFS)P1605 迷宫 洛谷

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  8. 【贪心】洛谷 P1199 三国游戏 题解

     这个题尽管题目长,主要还是证明贪心的正确性(与博弈关系不大) 题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战 ...

  9. 洛谷P2460 [SDOI2007]科比的比赛(题解)(贪心+搜索)

    科比的比赛(题解)(贪心+搜索) 标签:算法--贪心 阅读体验:https://zybuluo.com/Junlier/note/1301158 贪心+搜索 洛谷题目:P2460 [SDOI2007] ...

  10. 洛谷 P3805 【模板】manacher算法

    洛谷 P3805 [模板]manacher算法 洛谷传送门 题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入格式 一行小写英文字符 ...

随机推荐

  1. AT_arc113_c 题解

    洛谷链接&Atcoder 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 现在有一个字符串 \(S\),每一次你可以选择一个 \(i(1 \le i \le | ...

  2. [rCore学习笔记 00]总览

    写在前面 本随笔是非常菜的菜鸡写的.如有问题请及时提出. 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 rCo ...

  3. Jmeter函数助手37-setProperty

    setProperty函数用于修改jmeter属性值. 属性名称:填入需要修改的属性名 Value of property:填入需要修改的属性值 Return Original Value of pr ...

  4. vue3源码学习api-vue-sfc文件编译

    vue 最有代表性质的就是.VUE 的文件,每一个vue文件都是一个组件,那么vue 组件的编译过程是什么样的呢 Vue 单文件组件 (SFC)和指令 ast 语法树 一个 Vue 单文件组件 (SF ...

  5. 【Redis】05 持久化

    持久化概述 Redis提供了不同的持久性选项: 1.RDB持久性按指定的时间间隔执行数据集的时间点快照. 2.AOF持久性会记录服务器接收的每个写入操作,这些操作将在服务器启动时再次播放,以重建原始数 ...

  6. 循环神经网络 —— LSTM 有状态模型(stateful LSTM)和无状态模型(stateless LSTM)

    相关参考: 训练后的LSTM模型在进行预测时的初始h_n和c_n是什么或应该怎么设置? Keras中对RNN网络的statefull和stateless设置: 链接:https://keras.io/ ...

  7. 国产最好用的操作系统——deepin,为什么不适合生产环境

    前几天看了罗永浩的视频,他推荐了一本Intel创始人的书,看了这本书后想到书中大谈Intel和Microsoft的合作才创建下了今天的PC世界.看到这我就有些不爽了,现在美国各种控制和制裁我们的芯片, ...

  8. 几乎纯css实现弹出框

    今天需要做一个弹出框,右下角提示的那种 ,看了一两个jquery的插件 总是不太满意 .一方面js内容太多,另一方面 不太好配合已经存在的样式使用.所以 就自己用css直接实现了下 效果还可以 . 上 ...

  9. 这应该是全网最全的CSP-S初赛复习吧

    点我到洛谷看 \(Update\ 2024/8/2:\) 加入了在数据结构中增加了"树",做出部分更改. linux基础命令 cd 切换目录 ls 列出目前工作目录所含的文件及子目 ...

  10. UITableView的原理——探究及重新实现代码

    转自简书,原文地址,本文主要探讨一些特殊细节,像视图重用这类最基本的原理可在源码里查看. 先前重新实现了一个list容器视图,由于Apple没有开源,在此分享过程中探索到的UITableView一些细 ...