题目链接: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:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #define MAX_N 1005
 5
 6 using namespace std;
 7
 8 int n,c;
 9 int ans=0;
10 int w[MAX_N];
11 long long sum[MAX_N];
12
13 void dfs(int col,int tot)
14 {
15     if(tot>c) return;
16     ans=max(ans,tot);
17     if(col>n) return;
18     if(tot+sum[n]-sum[col-1]<=ans) return;
19     dfs(col+1,tot+w[col]);
20     dfs(col+1,tot);
21 }
22
23 void read()
24 {
25     cin>>n>>c;
26     for(int i=n;i>=1;i--)
27     {
28         cin>>w[i];
29     }
30 }
31
32 void solve()
33 {
34     sum[0]=0;
35     for(int i=1;i<=n;i++)
36     {
37         sum[i]=sum[i-1]+w[i];
38     }
39     dfs(1,0);
40 }
41
42 void print()
43 {
44     cout<<ans<<endl;
45 }
46
47 int main()
48 {
49     read();
50     solve();
51     print();
52 }

转载于:https://www.cnblogs.com/Leohh/p/7634313.html

BZOJ 1673 [Usaco2005 Dec]Scales 天平:dfs 启发式搜索 A*搜索相关推荐

  1. bzoj 1673: [Usaco2005 Dec]Scales 天平(DFS)

    1673: [Usaco2005 Dec]Scales 天平 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 695  Solved: 253 [Subm ...

  2. bzoj 1671: [Usaco2005 Dec]Knights of Ni 骑士(BFS)

    1671: [Usaco2005 Dec]Knights of Ni 骑士 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 416  Solved: 26 ...

  3. bzoj 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(DP)

    1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 941  Solved ...

  4. bzoj 1671: [Usaco2005 Dec]Knights of Ni 骑士

    题目链接 题目背景: 贝茜遇到了一件很麻烦的事:她无意中闯入了森林里的一座城堡,如果她想回家,就必须穿过这片由骑士们守护着的森林.为了能安全地离开,贝茜不得不按照骑士们的要求,在森林寻找一种特殊的灌木 ...

  5. bzoj 1731 [Usaco2005 dec]Layout 排队布局——差分约束

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1731 对差分约束理解更深.还发现美妙博客:http://www.cppblog.com/me ...

  6. bzoj 1731: [Usaco2005 dec]Layout 排队布局【差分约束】

    差分约束裸题,用了比较蠢的方法,先dfs_spfa判负环,再bfs_spfa跑最短路 注意到"奶牛排在队伍中的顺序和它们的编号是相同的",所以\( d_i-d_{i-1}>= ...

  7. BZOJ 3391: [Usaco2004 Dec]Tree Cutting网络破坏(搜索)

    这道直接遍历一遍求出每个点的子节点数目就行了= = CODE: #include<cstdio> #include<iostream> #include<algorith ...

  8. 1671: [Usaco2005 Dec]Knights of Ni 骑士

    1671: [Usaco2005 Dec]Knights of Ni 骑士 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 351  Solved: 22 ...

  9. 【八数码问题】基于状态空间法的知识表示与状态搜索:无信息搜索(BFS/DFS) 启发式搜索(A*)

    前言 一.问题引入 二.状态空间法 1. 知识及其表示 2. 状态空间法定义 3. 问题求解 三.基于状态空间搜索法解决八数码问题 1. 八数码问题的知识表示 2. 状态空间图搜索 1. 无信息搜索 ...

最新文章

  1. Linux下安装Oracle11g服务器(centos7下)
  2. 【从零学习OpenCV 4】Image Watch插件的使用
  3. 当前(2019年)机器学习中有哪些研究方向特别的坑?
  4. IOS开发错误library not found for -lXXX
  5. 英特尔宣布McAfee成为独立的安全公司
  6. SQL存储过程解密研究
  7. Python之pandas:对pandas中dataframe数据中的索引输出、修改、重命名等详细攻略
  8. 前端学习(2181):vue-router导航守卫的补充
  9. java 二叉树特点_疯狂java笔记之树和二叉树
  10. 多站点IIS的架设:端口法
  11. linux配置sftp-server,Ubuntu Server如何配置SFTP(建立用户监狱)
  12. 使用RIP协议处理不连续的子网和VLSM(一)
  13. fatal exception java_java.lang.IllegalStateExceptio
  14. CME比特币期货去年促成超1100万枚比特币交易量
  15. 程序集与托管模块的概念
  16. 微信 8.0 来啦,炸裂!
  17. 几种降维思想方法总结
  18. PHP调试工具 - FirePHP安装与使用方法
  19. angular8封装http服务
  20. hive drop表恢复手册

热门文章

  1. es java bulk 导入数据一直超时_亿级别记录的mongodb批量导入ElasticSearch的java代码完整实现...
  2. android马赛克代码,android图片马赛克 mosaic
  3. 多时隙编码aloha(MuSCA)与编码时隙aloha(CSA)协议分析
  4. 拓扑排序----Kahn算法和字典序最小的拓扑排序
  5. 数据库实验7 数据库视图的定义与使用
  6. 文件包含漏洞的审计(审计思路)
  7. VS2012全屏背景修改教程
  8. [PyTorch] reverse the normalization
  9. 吴恩达神经网络和深度学习-学习笔记-11-Momentum梯度下降法
  10. Echarts数据可视化echarts实例的相关操作,开发全解+完美注释