题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1673

题意:

  有n个砝码(n <= 1000),重量为w[i]。

  你要从中选择一些砝码,使得这些砝码的总重量最大,但不超过c。

  w[i]按递增顺序给出,并且保证w[i] >= w[i-1]+w[i-2] (i >= 3)。

题解:

  dfs。

  因为w[i] >= w[i-1]+w[i-2],所以其实n最大只有45左右(类似斐波那契数列)。

  优化:

    (1)启发式:优先选砝码(不跳过),并且优先选重量大的砝码,尽早更新ans。

    (2)A*搜索:如果当前tot + 剩下砝码的总重(前缀和) < ans,则return。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 1005 using namespace std; int n,c;
int ans=;
int w[MAX_N];
long long sum[MAX_N]; void dfs(int col,int tot)
{
if(tot>c) return;
ans=max(ans,tot);
if(col>n) return;
if(tot+sum[n]-sum[col-]<=ans) return;
dfs(col+,tot+w[col]);
dfs(col+,tot);
} void read()
{
cin>>n>>c;
for(int i=n;i>=;i--)
{
cin>>w[i];
}
} void solve()
{
sum[]=;
for(int i=;i<=n;i++)
{
sum[i]=sum[i-]+w[i];
}
dfs(,);
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}

最新文章

  1. php地址赋值值和传值赋值
  2. js中块级作用域
  3. 每天一个linux命令(46):ping命令
  4. js插件zClip实现复制到剪贴板功能
  5. json字符串和对象的相互转化
  6. C++ 窗口可改风格
  7. SecureCRT连接虚拟机中的Linux系统(Ubuntu)_Linux教程
  8. Linux下ping,telnet,ssh命令的比较
  9. Linux - 有效群组(effective group)与初始群组(initial group),groups,newgrp
  10. 【Swift 4.0】扩展 WCDB 支持 SQL 语句
  11. 使用 Apache Web 配置多个站点
  12. 5.form表单验证
  13. Docker(二十三)-Docker使用pipework配置本地网络
  14. WepE
  15. bzoj 1415 期望dp + 记忆化搜索
  16. node-nginx二级域名添加配置
  17. throws和throw的用法例子以及检测和非检查异常
  18. Leetcode 700. 二叉搜索树中的搜索
  19. phpstudy开启时mysql不开启时红色灯
  20. 【学习笔记】深入理解js原型和闭包(7)——原型的灵活性

热门文章

  1. 想提升java知识的同学请进
  2. 【LeetCode】84. Largest Rectangle in Histogram——直方图最大面积
  3. LeetCode Recover Binary Search Tree——二查搜索树中两个节点错误
  4. Node.js 抓取电影天堂新上电影节目单及ftp链接
  5. redmine 自己定义字段mysql表结构
  6. document.readyState和xmlhttp.onreadystatechange
  7. Struts2实现文件的上传与动态下载功能。
  8. HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程
  9. vsftpd 自动安装脚本
  10. Linux下比较常用的svn命令