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

动态规划——斜率优化DP

题目清单

在这里插入图片描述

acwing300.任务安排1

状态表示f[i]:
集合:完成前i个任务且第i个任务为最后一个批次最后一个任务的方案。
属性:min
状态计算:
f [ i ] = m i n { f [ j ] + s u m t [ i ] × ∑ j + 1 i w [ u ] + s × ∑ j + 1 n w [ i ] } f[i]=min\{f[j]+sumt[i] ×\sum_{j+1}^{i}w[u]+s×\sum_{j+1}^{n}w[i]\} f[i]=min{f[j]+sumt[i]×j+1iw[u]+s×j+1nw[i]} ( 0 ≤ j < i ) (0\leq j < i) (0j<i)
f [ i ] = m i n { f [ j ] + s u m t [ i ] × ( s u m c [ i ] − s u m c [ j ] ) + s × ( s u m c [ n ] − s u m c [ j ] ) } f[i]=min\{f[j]+sumt[i] ×(sumc[i]-sumc[j])+s×(sumc[n]-sumc[j])\} f[i]=min{f[j]+sumt[i]×(sumc[i]sumc[j])+s×(sumc[n]sumc[j])} ( 0 ≤ j < i ) (0\leq j < i) (0j<i)

时间复杂度为 O ( n 2 ) O(n^2) O(n2)

#include <iostream>
#include <cstring>
using namespace std;
const int N = 5010;
typedef long long ll;
ll f[N];
ll sumt[N], sumc[N];
int n, s;
int main()
{cin >> n >> s;for (int i = 1; i <= n; i ++ ){scanf("%lld%lld", &sumt[i], &sumc[i]);sumt[i] += sumt[i - 1];sumc[i] += sumc[i - 1];}memset(f, 0x3f, sizeof f);f[0] = 0;for (int i = 1; i <= n; i ++ ){for (int j = 0; j < i; j ++ ){f[i] = min(f[i], f[j] + sumt[i] * (sumc[i] - sumc[j]) + s * (sumc[n] - sumc[j]));}}cout << f[n];return 0;
}

acwing301.任务安排2

我们对上一题得到的状态转移方程 f [ i ] = m i n { f [ j ] + s u m t [ i ] × ( s u m c [ i ] − s u m c [ j ] ) + s × ( s u m c [ n ] − s u m c [ j ] ) } f[i]=min\{f[j]+sumt[i] ×(sumc[i]-sumc[j])+s×(sumc[n]-sumc[j])\} f[i]=min{f[j]+sumt[i]×(sumc[i]sumc[j])+s×(sumc[n]sumc[j])} ( 0 ≤ j < i ) (0\leq j < i) (0j<i)进行编变形。

f [ i ] = f [ j ] + s u m t [ i ] × s u m c [ i ] − s u m t [ i ] × s u m c [ j ] + s × s u m c [ n ] − s × s u m c [ j ] f[i]=f[j]+sumt[i] ×sumc[i]-sumt[i]×sumc[j]+s×sumc[n]-s×sumc[j] f[i]=f[j]+sumt[i]×sumc[i]sumt[i]×sumc[j]+s×sumc[n]s×sumc[j]
f [ i ] = f [ j ] − s u m t [ i ] × s u m c [ j ] − s × s u m c [ j ] + s u m t [ i ] × s u m c [ i ] + s × s u m c [ n ] f[i]=f[j]-sumt[i]×sumc[j]-s×sumc[j]+sumt[i] ×sumc[i]+s×sumc[n] f[i]=f[j]sumt[i]×sumc[j]s×sumc[j]+sumt[i]×sumc[i]+s×sumc[n]
f [ i ] = f [ j ] − ( s u m t [ i ] + s ) × s u m c [ j ] + s u m t [ i ] × s u m c [ i ] + s × s u m c [ n ] f[i]=f[j]-(sumt[i]+s)×sumc[j]+sumt[i] ×sumc[i]+s×sumc[n] f[i]=f[j](sumt[i]+s)×sumc[j]+sumt[i]×sumc[i]+s×sumc[n]
移项得到
f [ j ] = ( s u m t [ i ] + s ) × s u m c [ j ] − s u m t [ i ] × s u m c [ i ] − s × s u m c [ n ] + f [ i ] f[j]=(sumt[i]+s)×sumc[j]-sumt[i] ×sumc[i]-s×sumc[n]+f[i] f[j]=(sumt[i]+s)×sumc[j]sumt[i]×sumc[i]s×sumc[n]+f[i]
上式是 y = k x + b y=kx+b y=kx+b的形式, y y y f [ j ] f[j] f[j], k k k ( s u m t [ i ] + s ) (sumt[i]+s) (sumt[i]+s), x x x s u m c [ j ] sumc[j] sumc[j], b b b f [ i ] − s u m t [ i ] × s u m c [ i ] − s × s u m c [ n ] f[i]-sumt[i] ×sumc[i]-s×sumc[n] f[i]sumt[i]×sumc[i]s×sumc[n]

我们的目标是求 f [ i ] f[i] f[i]的最小值,因为 b b b中除了 f [ i ] f[i] f[i]以外的部分是常量,也正因此等价于去想办法让截距最小。因为 k k k也是一个常量, 所以本问题又可以转化为给定一条斜率固定的直线去找过一个 ( x , y ) (x,y) (x,y)点对,使得 b b b最小。 ( x , y ) (x,y) (x,y)点对有 ( s u m c [ 0 ] , f [ 0 ] ) (sumc[0],f[0]) (sumc[0],f[0]) ( s u m c [ 1 ] , f [ 1 ] ) (sumc[1],f[1]) (sumc[1],f[1]),…, ( s u m c [ i − 1 ] , f [ i − 1 ] ) (sumc[i-1],f[i-1]) (sumc[i1],f[i1])

给出结论,无论斜率如何变化,最小值一定是取到凸包下边界的一个点。
具体来说,最小值一定是第一个大于直线斜率的线段头部 k i k_i ki的点。

分析题目:
1., k k k ( s u m t [ i ] + s ) (sumt[i]+s) (sumt[i]+s),单调递增。
2.新加入点的横坐标也是单调递增。
由于斜率 k k k是单调递增的,也就是说,如果当前的斜率 k k k大于队头两个点的斜率时,那么一开始的点就可以彻底删除,在以后也不会用到,所以凸包中的点可以用单调队列来维护。

维护一个凸包的做法:
1.查询的时候,把队头小于当前斜率k的点删掉。
f [ q [ h h + 1 ] − f [ q [ h h ] s u m c [ q [ h h + 1 ] ] − s u m c [ q [ h h ] ≤ s u m t [ i ] + s \frac{f[q[hh+1]-f[q[hh]}{sumc[q[hh+1]]-sumc[q[hh]}\leq sumt[i]+s sumc[q[hh+1]]sumc[q[hh]f[q[hh+1]f[q[hh]sumt[i]+s
2.插入的时候,把不在凸包上的点删掉。
f [ q [ t t ] − f [ q [ t t − 1 ] s u m c [ q [ h h ] ] − s u m c [ q [ h h − 1 ] ≥ f [ i ] − f [ q [ t t ] ] s u m c [ i ] − s u m c [ q [ h h ] ] \frac{f[q[tt]-f[q[tt-1]}{sumc[q[hh]]-sumc[q[hh-1]}\geq \frac{f[i]-f[q[tt]]}{sumc[i]-sumc[q[hh]]} sumc[q[hh]]sumc[q[hh1]f[q[tt]f[q[tt1]sumc[i]sumc[q[hh]]f[i]f[q[tt]]

时间复杂度为 O ( n ) O(n) O(n)

#include <iostream>
using namespace std;
typedef long long ll;
const int N = 300010;
int q[N];
ll t[N], c[N];
ll f[N];
int n, s;
int main()
{cin >> n >> s;for (int i = 1; i <= n; i ++ ){scanf("%lld%lld", &t[i], &c[i]);t[i] += t[i - 1];c[i] += c[i - 1];}int hh = 0, tt = 0;for (int i = 1; i <= n; i ++ ){while (hh < tt && f[q[hh + 1]] - f[q[hh]] <= (t[i] + s) * (c[q[hh + 1]] - c[q[hh]])) hh ++ ;int j = q[hh];f[i] = f[j] + t[i] * (c[i] - c[j]) + s * (c[n] - c[j]);while (hh < tt && (f[q[tt]] - f[q[tt - 1]]) * (c[i] - c[q[tt]]) >= (f[i] - f[q[tt]]) * (c[q[tt]] - c[q[tt - 1]])) tt -- ;q[++ tt] = i;}cout << f[n];return 0;
}

acwing302.任务安排3

和上一题不同的是, 本题中机器的工作时间可以为负数,也正因此斜率 k k k并不是随着 i i i单调递增的了,上一题中,对于凸包的头部和尾部均使用单调队列来处理,本题则需要使用二分去找到合适的点对,对尾部的处理同样使用单调队列。

#include <iostream>
using namespace std;
const int N = 300010;
typedef long long ll;
ll t[N], c[N];
ll f[N];
int q[N];
int n, s;
int main()
{cin >> n >> s;for (int i = 1; i <= n; i ++ ){scanf("%lld%lld", &t[i], &c[i]);t[i] += t[i - 1];c[i] += c[i - 1];}int hh = 0, tt = 0;for (int i = 1; i <= n; i ++ ){int l = hh, r = tt;while (l < r){int mid = l + r >> 1;if (f[q[mid + 1]] - f[q[mid]] > (double)(t[i] + s) * (c[q[mid + 1]] - c[q[mid]])) r = mid;else l = mid + 1;}int j = q[l];f[i] = f[j] - (t[i] + s) * c[j] + t[i] * c[i] + s * c[n];while (hh < tt && (double)(f[q[tt]] - f[q[tt - 1]]) * (c[i] - c[q[tt]]) >= (double)(f[i] - f[q[tt]]) * (c[q[tt]] - c[q[tt - 1]])) tt -- ;q[++ tt] = i;}cout << f[n];return 0;
}

acwing303.运输小猫

每一只小猫都会对应一个最早出发时间 a [ i ] = t [ i ] − d [ h [ i ] ] a[i]=t[i]-d[h[i]] a[i]=t[i]d[h[i]],也就是结束玩耍的时间减去到1号山的距离。当我们处理完 a a a数组后,对数组 a a a进行一个从小打到的排序。这样一来,相邻一段猫肯定是要由一个饲养员接走的,饲养员的出发时间就是这一段最后一只猫对应的数组 a a a的值。
状态表示f[i][j]:
集合:对于前 i i i只猫,安排 j j j个饲养员去接猫的所有方案。
属性:min
状态计算:
f [ i ] [ j ] = m i n { f [ k ] [ j − 1 ] + ∑ k + 1 i ( a i − a u ) } f[i][j]=min\{f[k][j-1]+\sum_{k+1}^{i}(a_i-a_u)\} f[i][j]=min{f[k][j1]+k+1i(aiau)} ( 0 ≤ k < i ) \ \ \ (0\leq k <i)    (0k<i)
f [ i ] [ j ] = m i n { f [ k ] [ j − 1 ] + ∑ k + 1 i a i − ∑ k + 1 i a u } f[i][j]=min\{f[k][j-1]+\sum_{k+1}^{i}a_i-\sum_{k+1}^{i}a_u\} f[i][j]=min{f[k][j1]+k+1iaik+1iau} ( 0 ≤ k < i ) \ \ \ (0\leq k <i)    (0k<i)
f [ i ] [ j ] = m i n { f [ k ] [ j − 1 ] + ( i − k ) a i − ( s [ i ] − s [ k ] ) } f[i][j]=min\{f[k][j-1]+(i-k)a_i-(s[i]-s[k])\} f[i][j]=min{f[k][j1]+(ik)ai(s[i]s[k])} ( 0 ≤ k < i ) \ \ \ (0\leq k <i)    (0k<i)
移项得:
f [ k ] [ j − 1 ] + s [ k ] = a [ i ] × k + f [ i ] [ j ] + s [ i ] − i a [ i ] f[k][j-1]+s[k]=a[i] ×k+f[i][j]+s[i]-ia[i] f[k][j1]+s[k]=a[i]×k+f[i][j]+s[i]ia[i]
至此,本题就转换为了任务安排2。

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int N = 100010;
const int P = 110;
ll f[P][N];
ll a[N];
ll s[N];
int d[N];
int q[N];
int n, m, p;
ll get_y(int j, int k)
{return f[j - 1][k] + s[k];
}
int main()
{cin >> n >> m >> p;for (int i = 2; i <= n; i ++ ){scanf("%d", &d[i]);d[i] += d[i - 1];}for (int i = 1; i <= m; i ++ ){ll h, t;scanf("%lld%lld", &h, &t);a[i] = t - d[h];}sort(a + 1, a + m + 1);for (int i = 1; i <= m; i ++ ){s[i] = a[i];s[i] += s[i - 1];}memset(f,0x3f,sizeof f);for(int i = 0;i <= p;i ++)f[i][0] = 0;for (int i = 1; i <= p; i ++ ){int hh = 0, tt = 0;for (int j = 1; j <= m; j ++ ){while (hh < tt && get_y(i, q[hh + 1]) - get_y(i, q[hh]) <= (q[hh + 1] - q[hh]) * a[j]) hh ++;int k = q[hh];f[i][j] = f[i - 1][k] + (j - k) * a[j] - (s[j] - s[k]);while (hh < tt && (get_y(i, q[tt]) - get_y(i, q[tt - 1])) * (j - q[tt]) >= (get_y(i, j) - get_y(i, q[tt])) * (q[tt] - q[tt - 1])) tt --;q[++ tt] = j;}}cout << f[p][m];return 0;
}

相关文章:

动态规划——斜率优化DP

题目清单 acwing300.任务安排1 状态表示f[i]: 集合&#xff1a;完成前i个任务且第i个任务为最后一个批次最后一个任务的方案。 属性&#xff1a;min 状态计算&#xff1a; f [ i ] m i n { f [ j ] s u m t [ i ] ∑ j 1 i w [ u ] s ∑ j 1 n w [ i ] } f[i]min\{f[j…...

【深度之眼cs231n第七期】笔记(三十一)

目录 强化学习什么是强化学习&#xff1f;马尔可夫决策过程&#xff08;MDP&#xff09;Q-learning策略梯度SOTA深度强化学习 还剩一点小尾巴&#xff0c;还是把它写完吧。&#xff08;距离我写下前面那行字又过了好几个月了【咸鱼本鱼】&#xff09;&#xff08;汗颜&#xff…...

【云安全】云原生-K8S-简介

K8S简介 Kubernetes&#xff08;简称K8S&#xff09;是一种开源的容器编排平台&#xff0c;用于管理容器化应用的部署、扩展和运维。它由Google于2014年开源并交给CNCF&#xff08;Cloud Native Computing Foundation&#xff09;维护。K8S通过提供自动化、灵活的功能&#xf…...

SpringBoot中Excel表的导入、导出功能的实现

文章目录 一、easyExcel简介二、Excel表的导出2.1 添加 Maven 依赖2.2 创建导出数据的实体类4. 编写导出接口5. 前端代码6. 实现效果 三、excel表的导出1. Excel表导入的整体流程1.1 配置文件存储路径 2. 前端实现2.1 文件上传组件 2.2 文件上传逻辑3. 后端实现3.1 文件上传接口…...

Spark入门(Python)

目录 一、安装Spark 二、Spark基本操作 一、安装Spark pip3 install pyspark 二、Spark基本操作 # 导入spark的SparkContext,SparkConf模块 from pyspark import SparkContext, SparkConf # 导入os模块 import os # 设置PYSPARK的python环境 os.environ[PYSPARK_PYTHON] &…...

Daemon进程创建过程

Daemon创建过程&#xff1a; 1、fork&#xff0c;创建子进程。退出父进程。 2、setsid&#xff0c;创建新会话。脱离原会话、进程组、控制终端。 再次fork&#xff0c;与终端完全脱离。第二次fork的意义&#xff1f;&#xff1f;&#xff1f;&#xff1f; 先脱离原父进程&#…...

在sortablejs的拖拽排序情况下阻止input拖拽事件

如题 问题 在vue3的elementPlus的table中&#xff0c;通过sortablejs添加了行拖拽功能&#xff0c;但是在行内会有输入框&#xff0c;此时拖拽输入框会触发sortablejs的拖拽功能 解决 基于这个现象&#xff0c;我怀疑是由于拖拽事件未绑定而冒泡到后面的行上从而导致的拖拽…...

C++初阶—string类

第一章&#xff1a;为什么要学习string类 1.1 C语言中的字符串 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&…...

C# 提取PDF表单数据

目录 使用工具 C# 提取多个PDF表单域的数据 C# 提取特定PDF表单域的数据 PDF表单是一种常见的数据收集工具&#xff0c;广泛应用于调查问卷、业务合同等场景。凭借出色的跨平台兼容性和标准化特点&#xff0c;PDF表单在各行各业中得到了广泛应用。然而&#xff0c;当需要整合…...

算法刷题Day28:BM66 最长公共子串

题目链接&#xff0c;点击跳转 题目描述&#xff1a; 解题思路&#xff1a; 方法一&#xff1a;暴力枚举 遍历str1的每个字符x&#xff0c;并在str2中寻找以相同元素x为起始的最长字符串。记录最长的公共子串及其长度。 代码实现&#xff1a; def LCS(self, str1: str, st…...

论文阅读笔记:MambaOut: Do We Really Need Mamba for Vision?

论文阅读笔记&#xff1a;MambaOut: Do We Really Need Mamba for Vision? 1 背景2 创新点3 方法4 模块4.1 Mamba适合什么任务4.2 视觉识别任务是否有很长的序列4.3 视觉任务是否需要因果token混合模式4.4 关于Mamba对于视觉的必要性假设 5 效果 论文&#xff1a;https://arxi…...

HarmonyOS:ForEach:循环渲染

一、前言 ForEach接口基于数组类型数据来进行循环渲染&#xff0c;需要与容器组件配合使用&#xff0c;且接口返回的组件应当是允许包含在ForEach父容器组件中的子组件。例如&#xff0c;ListItem组件要求ForEach的父容器组件必须为List组件。 API参数说明见&#xff1a;ForEa…...

Python3 【函数】项目实战:5 个新颖的学习案例

Python3 【函数】项目实战&#xff1a;5 个新颖的学习案例 本文包含5编程学习案例&#xff0c;具体项目如下&#xff1a; 简易聊天机器人待办事项提醒器密码生成器简易文本分析工具简易文件加密解密工具 项目 1&#xff1a;简易聊天机器人 功能描述&#xff1a; 实现一个简易…...

XSS 漏洞全面解析:原理、危害与防范

目录 前言​编辑 漏洞原理 XSS 漏洞的危害 检测 XSS 漏洞的方法 防范 XSS 漏洞的措施 前言 在网络安全的复杂版图中&#xff0c;XSS 漏洞&#xff0c;即跨站脚本攻击&#xff08;Cross - Site Scripting&#xff09;&#xff0c;是一类极为普遍且威胁巨大的安全隐患。随着互…...

从 GShard 到 DeepSeek-V3:回顾 MoE 大模型负载均衡策略演进

作者&#xff1a;小天狼星不来客 原文&#xff1a;https://zhuanlan.zhihu.com/p/19117825360 故事要从 GShard 说起——当时&#xff0c;人们意识到拥有数十亿甚至数万亿参数的模型可以通过某种形式的“稀疏化&#xff08;sparsified&#xff09;”来在保持高精度的同时加速训…...

【回溯+剪枝】回溯算法的概念 全排列问题

文章目录 46. 全排列Ⅰ. 什么是回溯算法❓❓❓Ⅱ. 回溯算法的应用1、组合问题2、排列问题3、子集问题 Ⅲ. 解题思路&#xff1a;回溯 剪枝 46. 全排列 46. 全排列 ​ 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 …...

Flutter解决macbook M芯片Android Studio中不显示IOS真机的问题

下载了最新的Android Studio LadyBug 下载了最新的xcode16.2 结果&#xff0c;只有安卓真机才在Android studio显示&#xff0c; IOS真机只在xcode显示 IOS真机不在android studio显示。 解决方法是&#xff1a; 在终端运行如下命令&#xff1a; sudo xcode-select -s /Applic…...

自签证书的dockerfile中from命令无法拉取镜像而docker的pull命令能拉取镜像

问题现象&#xff1a; docker pull images拉取镜像正常 dockerfile中的from命令拉取镜像就会报出证书错误。报错信息如下&#xff1a; [bjxtbwj-kvm-test-jenkins-6-243 ceshi_dockerfile]$ docker build . [] Building 0.4s (3/3) FINISHED …...

【MySQL】--- 复合查询 内外连接

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; MySQL &#x1f3e0; 基本查询回顾 假设有以下表结构&#xff1a; 查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时还要满足他们的姓名首字母为…...

QT TLS initialization failed

qt使用QNetworkAccessManager下载文件&#xff08;给出的链接可以在浏览器里面下载文件&#xff09;&#xff0c;下载失败&#xff0c; 提示“TLS initialization failed”通常是由于Qt在使用HTTPS进行文件下载时&#xff0c;未能正确初始化TLS&#xff08;安全传输层协议&…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...