双向广搜

news/2025/3/15 11:09:09/

从两侧同时展开,那测数据少就从哪侧展,两者展开结果出现一样的,返回答案

127. 单词接龙 - 力扣(LeetCode)

class Solution {
public:int ladderLength(string beginWord, string endWord, vector<string>& wordList) {unordered_set<string> dict(wordList.begin(),wordList.end());if(dict.find(endWord)==dict.end())return 0;unordered_set<string> smalllevel,biglevel,nextlevel;smalllevel.insert(beginWord);biglevel.insert(endWord);for(int len=2;!smalllevel.empty();len++){for(string s:smalllevel){string w=s;for(int i=0;i<w.length();i++){char old=w[i];for(char ch='a';ch<='z';ch++){if(ch!=old){w[i]=ch;if(biglevel.find(w)!=biglevel.end())return len;if(dict.find(w)!=dict.end()){//塞入nextlevelnextlevel.insert(w);dict.erase(w);}}}w[i]=old;}}if(nextlevel.size()<=biglevel.size()){smalllevel=nextlevel;nextlevel.clear();}else{smalllevel=biglevel;biglevel=nextlevel;nextlevel.clear();}}return 0;}
};

第二种用法:分成左右两半时暴力展开,把所有结果再整合再一起

牛牛的背包问题

由于这道题目的数据范围过大,达到10的9次方,所以动态规划方法无法通过

P4799 [CEOI 2015] 世界冰球锦标赛 (Day2) - 洛谷

#include<bits/stdc++.h>
using namespace std;
const int maxn=40;
long long arr[maxn],w;
vector<long long>lsum,rsum;
int n;
void dfs(int i,int end,long long path,vector<long long> &ans)
{if(path>w)return;if(i==end+1)ans.push_back(path);else{dfs(i+1,end,path+arr[i],ans);dfs(i+1,end,path,ans);}
}
int main()
{cin>>n>>w;for(int i=1;i<=n;i++)cin>>arr[i];dfs(1,n/2,0,lsum);dfs(n/2+1,n,0,rsum);sort(lsum.begin(),lsum.end());sort(rsum.begin(),rsum.end());long long ans=0;for(int i=lsum.size()-1,j=0;i>=0;i--){while(j<rsum.size()&&lsum[i]+rsum[j]<=w)j++;ans+=j;}cout<<ans;
}

最接近目标的子序列和

1755. 最接近目标值的子序列和 - 力扣(LeetCode)

class Solution {
public:vector<int> lsum,rsum;int minAbsDifference(vector<int>& nums, int goal) {int n=nums.size();f(0,n/2,nums,lsum,0);f(n/2,n,nums,rsum,0);sort(lsum.begin(),lsum.end());sort(rsum.begin(),rsum.end());int ans=INT_MAX;for(int l=0,r=rsum.size()-1;l<lsum.size();l++){while(r>0&&abs(lsum[l]+rsum[r]-goal)>=abs(lsum[l]+rsum[r-1]-goal))r--;ans=min(ans,abs(lsum[l]+rsum[r]-goal));}return ans;}void f(int i,int end,vector<int> &nums,vector<int>& ans,long long path){if(i==end)ans.push_back(path);else{//这里选择了按组展开int j=i+1;for(;j<end&&nums[j]==nums[i];j++);for(int k=0;k<=j-i;k++)f(j,end,nums,ans,path+k*nums[i]);}}
};


http://www.ppmy.cn/news/1579294.html

相关文章

Compose 实践与探索八 —— LayoutModifier 解析

前面几节讲的 Modifier 都是起辅助作用的&#xff0c;比如 Modifier 的伴生对象、CombinedModifier、 ComposedModifier 以及几乎所有 Modifier 的父接口 Modifier.Element。本篇我们开始讲具有直接功效的 Modifier&#xff0c;分为几个大类&#xff1a;LayoutModifier、DrawMo…

基于Python+Vue开发的旅游景区管理系统源码+运行步骤

项目简介 该项目是基于PythonVue开发的旅游景区管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Python的旅游景…

内网渗透之内网基础知识(一)

工作组 工作组:工作组是局域网中的一个概念&#xff0c;他是长久的资源管理模式。默认情况下使 用工作组方式进行资源管理&#xff0c;将不同的 computer 按照不同的要求分类到不同的组 域:用来描述一种架构&#xff0c;和“工作组”相对应&#xff0c;由工作组升级而来的高级…

Doris vs Elasticsearch:全维度对比与实际成本案例解析

在大数据实时分析与日志检索场景中&#xff0c;企业常用的技术方案主要集中在 Elasticsearch 与 Apache Doris 两大产品上。Elasticsearch 以强大的全文检索和灵活的聚合功能著称&#xff0c;而 Doris 则凭借分布式 MPP 架构、列式存储以及日益完善的倒排索引能力&#xff0c;在…

本地算力部署大模型详细流程(一)

1、版本选择 本地部署就是自己部署deepseek模型&#xff0c;使用本地的算力。 主要瓶颈&#xff1a;内存显存的大小。特点&#xff1a;此方案不用联网。适合&#xff1a;有数据隐私方面担忧的或者保密单位根本就不能上网的。 2、部署过程 比较流行的是使用ollama&#xff1a;ht…

python 获取鼠标在屏幕上的具体位置以及动作,判断鼠标是否在浏览器内

python 获取鼠标在屏幕上的具体位置以及动作,判断鼠标是否在浏览器内 在Python中&#xff0c;要获取鼠标在屏幕上的具体位置以及动作&#xff0c;并判断鼠标是否在浏览器内&#xff0c;我们可以使用pyautogui库。pyautogui是一个非常强大的库&#xff0c;可以用来模拟鼠标操作、…

Web安全:保护您的网站免受网络威胁

在当今数字化时代&#xff0c;Web安全已成为每个网站和应用程序开发者的首要任务。无论是小型博客还是大型电商平台&#xff0c;网络攻击都可能带来灾难性后果。本文将探讨Web安全的重要性&#xff0c;并分享一些关键的最佳实践&#xff0c;帮助您保护网站免受威胁。 为什么Web…

具备多种功能的PDF文件处理工具

软件介绍 在日常办公和学习场景中&#xff0c;PDF文件使用极为频繁&#xff0c;而一款功能强大的PDF编辑软件能大幅提升处理效率。 今天要介绍的Adobe Acrobat Pro DC 2024.005.20414&#xff0c;就具备像编辑Word文档一样便捷编辑PDF的能力。 PDF文档在学习和工作中广泛应用…