当前位置: 首页 > news >正文

洛谷P5194(DFS深度优先搜索)

题目描述

约翰有一架用来称牛的体重的天平。与之配套的是 N (1≤N≤1000) 个已知质量的砝码(所有砝码质量的数值都在 32 位带符号整数范围内)。

每次称牛时,他都把某头奶牛安置在天平的某一边,然后往天平另一边加砝码,直到天平平衡,于是此时砝码的总质量就是牛的质量(约翰不能把砝码放到奶牛的那边,因为奶牛不喜欢称体重,每当约翰把砝码放到她的蹄子底下,她就会尝试把砝码踢到约翰脸上)。

天平能承受的物体的质量不是无限的,当天平某一边物体的质量大于 C (1≤C≤2
30
) 时,天平就会被损坏。砝码按照它们质量的大小被排成一行。并且,这一行中从第 3 个砝码开始,每个砝码的质量至少等于前面两个砝码(也就是质量比它小的砝码中质量最大的两个)的质量的和。

约翰想知道,用他所拥有的这些砝码以及这架天平,能称出的质量最大是多少。由于天平的最大承重能力为 C,他不能把所有砝码都放到天平上。

现在约翰告诉你每个砝码的质量,以及天平能承受的最大质量,你的任务是选出一些砝码,使它们的质量和在不压坏天平的前提下是所有组合中最大的。

输入格式

第 1 行输入两个用空格隔开的正整数 N 和 C。

第 2 到 N+1 行:每一行仅包含一个正整数,即某个砝码的质量。保证这些砝码的质量是一个不下降序列。

输出格式

输出一个正整数,表示用所给的砝码能称出的不压坏天平的最大质量。

题目分析

此题用经典的dfs搜索,剪枝函数和回溯函数是核心,由于给出的砝码按从小到大排列,则显然从后往前搜索更方便
dfs(cur,i)其中cur为当前计算值,i为从i到0检索
剪枝函数:创建砝码的前缀和数组b[i],当cur+b[i]<max时,停止检索,因为往后搜索max不会再变(max为答案)
回溯函数:当cur>C时(主要),转而从i-1处检索,即dfs(cur,i-1)

代码实现

#include<bits/stdc++.h>
using namespace std;
long long a[100],b[100];
int N,C,maxx=0;void dfs(int cur,int index){if(cur+b[index]<maxx) return;maxx=maxx>cur?maxx:cur;if(index==0) return;if(cur+a[index]<=C){dfs(cur+a[index],index-1);}dfs(cur,index-1);
}int main(){cin>>N>>C;int i=1;b[0]=0;while(i<=N){cin>>a[i];if(a[i]>C) break;b[i]=b[i-1]+a[i];i++;}dfs(0,i-1);cout<<maxx;return 0;
}
http://www.sczhlp.com/news/80164/

相关文章:

  • 南宁网站建设及推广wordpress未收到数据
  • 汉寿做网站的公司哈尔滨网站建设市场
  • flash个人网站模板莱州免费发布信息的网站平台
  • 哈尔滨网站建设排上海响应式网站
  • 建网站解决方案静态网页毕业设计
  • 78、身份证打星号
  • 记录生活
  • 怎样建设网络游戏网站网站关键词在哪里设置
  • 个人网站做淘宝客该网站受海外服务器保护
  • 深圳网站建设 联雅网络企业网站怎么做
  • 郑州网站seo哪家公司好吉林省建设信息网官网入吉
  • 网站网页建设一般多少钱营销公司网站模板下载
  • 建站平台功能结构图取消wordpress还原
  • 华为网站的建设目标专业外贸网站建设公司价格
  • 网站建设好后怎么制作网页疯狂购网站开发商
  • 网站建设最低价学计算机月薪一般多少
  • P9197 [JOI Open 2016] 摩天大楼 / Skyscraper
  • 石景山网站seo优化排名最近的男科医院是哪家医院
  • 网站可以用中国二字做抬头吗为什么百度没有收录我的网站
  • 商城网站建设如何交谈wordpress修改字体为微软
  • 网站能当做创业来做吗网络广告投放渠道有哪些
  • 霍山县网站建设公司北京互联网金融公司排名
  • 网站开发技术介绍南阳市中小企业融资综合信用服务
  • 可以做微信游戏的网站有哪些seo诊断方法步骤
  • 制作ppt的网站开发微信小程序多少钱
  • 百度可以建网站吗建设旅游网站的意义
  • 网站备案查询网站网站首页上海网站建设公司
  • 基于广义S变换的地震信号时频谱生成
  • 合肥网站建设推荐 晨飞网络asp网站做视频教程
  • 建设网站网上银行登录wordpress如何升级