参考教程: 裴蜀定理 - OI Wiki (oi-wiki.org)
内容:
设a,b是不全为零的整数,则存在整数x,y使得。
例题:
Problem - D - Codeforces
题意:
思路:
裴蜀定理,dp。
参考题解: (6条消息) D. Fox And Jumping(dp,裴蜀定理)_H-w-H的博客-CSDN博客
只有在若干个中加减法凑出1来,才能走光所有的点。
如果,则必存在,使得。
问题转换为如何以最小代价拼凑出gcd=1。
变成了一维dp。代表gcd为i时所需的最小代价。
由于i不连续,可以非常大,所以用map维护。
//https://codeforces.com/contest/510/problem/D #include <bits/stdc++.h> #define int long long const int N = 3e2+10; std::pair<int,int>a[N]; std::map<int,int>dp; int gcd(int a, int b) {return b ? gcd(b, a % b) : a; } signed main() { std::ios::sync_with_stdio(false); int n;std::cin>>n; for(int i=1;i<=n;i++)std::cin>>a[i].first; for(int i=1;i<=n;i++)std::cin>>a[i].second; for(int i=1;i<=n;i++){ dp[a[i].first]=dp[a[i].first]?std::min(dp[a[i].first],a[i].second):a[i].second; for(auto it:dp){ int k = gcd(it.first,a[i].first); dp[k]=dp[k]?std::min(dp[k],dp[it.first]+a[i].second):dp[it.first]+a[i].second; } } std::cout<<(dp[1]?dp[1]:-1)<<std::endl; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现