[蓝桥杯 2023 省 A] 买瓜 --暴力DFS+剪枝优化

server/2025/3/18 22:17:13/

题目来自洛谷:

暴力思路:

①根据题目,可以知道有三种操作,第一种操作选择这个瓜,第二种操作不选择这个瓜,第三种操作选择这个瓜的一半。我们可以用一个res来记录这三种操作返回的结果,最后在返回这三种操作的最小值。

②从数据样例中知道,对于第三种操作,在进行切一半操作的时候,数据类型会发生改变,int只能存整数,这样会导致答案错误。因此我们存数据前对数据进行*2操作,同时我们的总重量也要 m*2。

③由于本题数据过大,会爆int,我们要用long long 来存。

#include<bits/stdc++.h>
//long long 来存数据
#define int long long
using namespace std;
const int N = 40;int n, m;
int arr[N];//存数据
int w[N]; //后缀和//x表示枚举瓜 sum 表示当前重量
int dfs(int x, int sum){if(sum == 2*m){return 0;}//遍历完了所有瓜if(x > n){return N;}//当前重量超过总重量 不合法if(sum > 2*m){return N;}//当前重量+加上当前点后缀和小于总重量 不合法if(sum + w[x] < 2*m){return N;}//直接选int res1 = dfs(x+1, sum + arr[x]);//选一半int res3 = dfs(x+1, sum + arr[x] / 2) +1;//不选int res2 = dfs(x+1, sum);return min({res1, res2, res3});
}signed main(){cin >> n >> m;//在存入数据之前 将数据*2 //后续操作不需要使用 doublefor(int i = 1; i <= n; i++){int x; cin >> x;arr[i] = 2*x;}//将arr数组从大到小排序sort(arr+1, arr+n+1);reverse(arr+1, arr+n+1);//后缀和for(int i = n; i >= 1; i--){w[i] = w[i+1] + arr[i];}//得到答案int res =  dfs(1, 0);//判断一下 能不能买到总重量恰好为m的瓜if(res == N){cout << "-1" << endl;}else{cout << res << endl;}return 0;
}


http://www.ppmy.cn/server/176064.html

相关文章

STM32 DAC详解:从原理到实战输出正弦波

目录 一、DAC基础原理1.1 DAC的作用与特性1.2 DAC功能框图解析 二、DAC配置步骤2.1 硬件配置2.2 初始化结构体详解 三、DAC数据输出与波形生成3.1 数据格式与电压计算3.2 正弦波生成实战3.2.1 生成正弦波数组3.2.2 配置DMA传输3.2.3 定时器触发配置 四、常见问题与优化建议4.1 …

游戏引擎学习第163天

我们可以在资源处理器中使用库 因为我们的资源处理器并不是游戏的一部分&#xff0c;所以它可以使用库。我说过我不介意让它使用库&#xff0c;而我提到这个的原因是&#xff0c;今天我们确实有一个选择——可以使用库。 生成字体位图的两种方式&#xff1a;求助于 Windows 或…

现代密码学 | 具有数字签名功能的安全方案

1.案例背景 1.1冒用签名触发信任危机&#xff0c;360安全大脑率先截杀解除警报 2020年8月&#xff0c;360安全大脑独家发现冒用数字签名的网络攻击再度活跃&#xff0c;且继此前360安全大脑披露过的Go Daddy、Starfield Secure、赛门铁克、Verisign和DigiCert等国际知名CA证书…

前端性能优化回答思路

前端性能优化是面试中经常涉及的一个话题&#xff0c;面试官通常希望了解你在实际项目中如何处理性能瓶颈&#xff0c;如何识别和优化性能问题。以下是一些前端性能优化的常见问题以及你可以用来回答的思路&#xff1a; 如何提升页面加载速度&#xff1f; 回答思路&#xff1…

【Git】配置Git

配置Git 忽略特殊文件 在日常开发中&#xff0c;有些文件不想或不应该提交到远端&#xff0c;如保存数据库密码的配置文件。 在Git工作区的根目录下创建一个特殊的.gitignore文件&#xff0c;把要忽略的文件名填进去&#xff0c;Git就会自动忽略这些文件。 不需要从头写.gi…

【算法】模拟算法专题

文章目录 1.替换所有的问号1.1 题目1.2 思路1.3 代码 2. leetcode 495.提莫攻击2.1 题目2.2 思路2.3 代码 3.leetcode 6. Z字形变换3.1 题目3.2 思路3.3 代码 4. leetcode 38.外观数列4.1 题目4.2 思路4.3 代码 5.leetcode 1419.数青蛙5.1 题目5.2 思路5.3 代码 1.替换所有的问…

设计模式使用Java案例

代码设计要有可维护性&#xff0c;可复用性&#xff0c;可扩展性&#xff0c;灵活性&#xff0c;所有要使用设计模式进行灵活设计代码 创建型 简单工厂模式&#xff08;Simple Factory&#xff09; 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是一种创建型…

HTML 写一个计算器

<!DOCTYPE html> <html> <head><meta charsetutf-8/><title>Calculator</title><style id"jsbin-css">div, span {margin: 0;padding: 0;font-weight: bold;font: bold 16px Arial, sans-serif;/*禁止选中文本*/-moz-user…