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

算法-全排列

1、全排列函数的使用

举例:{1,2,3}的全排列

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){ll a[3] = {1, 2, 3};do{for (ll i = 0; i < 3;i++){cout << a[i] << " ";}cout << endl;} while (next_permutation(a, a + 3));
}

2、算法题应用

B-小苯购物_牛客周赛 Round 94

题目描述: 给我们3个优惠券,每个优惠券存在两个参数a,b。表示只有商品价格大于a元的时候我们才可以优惠b元。每种商品我们可以选或者不选。给出一开始商品的价格n,问最终n的最小值为多少?

本题思路:

  1. b都是大于0的,如果可以选择优惠我们选就比不选好。
  2. 但是这样就会存在一些问题,选择优惠之后可能商品的价格会变低,影响后面商品优惠的选择,说明这个又和优惠券的选择顺序有关。
  3. 本题只存在3个优惠券,我们枚举出所有选择的全排列进行依次比较即可,这样以来我们就可以考虑到所有的选择情况了。
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n; // 商品初始价格
ll a[3], b[3]; // 三个优惠券的参数,a[i]表示优惠阈值,b[i]表示优惠金额
// 函数f,用于计算在特定优惠券选择顺序下的最终价格
ll f(ll i, ll j, ll k) {ll m = n; // 初始化当前价格为初始价格n// 检查第一个优惠券是否可用,如果可用则应用优惠if (a[i] <= m) m -= b[i];// 检查第二个优惠券是否可用,如果可用则应用优惠if (a[j] <= m) m -= b[j];// 检查第三个优惠券是否可用,如果可用则应用优惠if (a[k] <= m) m -= b[k];// 如果最终价格小于0,则设置为0if (m < 0) m = 0;return m; // 返回最终价格
}
void solve() {cin >> n; // 读取商品初始价格n// 读取三个优惠券的参数for (ll i = 0; i < 3; i++) {cin >> a[i] >> b[i];}ll mx = n; // 初始化最小价格为初始价格nll c[3] = {0, 1, 2}; // 优惠券选择顺序的初始排列// 遍历所有可能的优惠券选择顺序do {ll v = f(c[0], c[1], c[2]); // 计算当前顺序下的最终价格// 如果当前最终价格小于当前最小价格,则更新最小价格if (v < mx) {mx = v;}} while (next_permutation(c, c + 3)); // 生成下一个排列cout << mx << endl; // 输出最小价格
}
int main() {ll t;cin >> t;while (t--) { solve(); }
}

http://www.lryc.cn/news/2386711.html

相关文章:

  • 最好用的wordpress外贸主题
  • 2025 河北ICPC( D. 金泰园(二分)-- C.年少的誓约(公式转化))
  • mongodb语法$vlookup性能分析
  • 晶圆隐裂检测提高半导体行业效率
  • 临床试验中的独立数据监查委员会
  • 在 LangChain 中集成 Mem0 记忆系统教程
  • PTA练习题
  • 华润电力招聘认知能力测评及性格测评真题题库考什么?
  • Maven Profile在插件与依赖中的深度集成
  • 手机平板等设备租赁行业MDM方案解析
  • 【前端】使用HTTPS
  • Python应用“面向对象”小练习
  • 如何调试CATIA CAA程序导致的CATIA异常崩溃问题
  • SQL查询效率以及索引设计
  • day37打卡
  • 分布式缓存:证明分布式系统的 CAP 理论
  • 软件设计师“面向对象设计”真题考点分析——求三连
  • vue项目webpack、vite、rollup、parcel四种构建工具对比
  • 系统架构中的限流实践:构建多层防护体系(二)
  • Linux常见设备
  • AI大模型学习二十八、ACE-Step:生成式AI音乐大模型简介与安装(一)
  • AI时代新词-AI芯片(AI - Specific Chip)
  • 【多智能体系统开发框架AutoGen解析与实践】
  • 接口性能测试-工具JMeter的学习
  • python如何离线安装pandas,numpy
  • Java Swing 自定义JOptionPane
  • 项目亮点 封装request请求模块
  • 通过 Terraform 构建您的第一个 Azure Linux 虚拟机
  • Linux连接服务器全攻略:从基础到进阶
  • pg库分表操作步骤- PostgreSQL 分区表