P7800 [COCI2015-2016#6] PAROVI 题解
读完题后可以首先发现,编号
而对于中间的数如果存在两对数
那么只有
由于求方案数,考虑 dp。
预处理出来所有互质的数对,并按左区间为关键字排序。
设
初始化:对于数对
转移:
选择这个区间:
不选这个区间:
答案即为
复杂度约为
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int mod=1e9;
const int N=25;
int n,cnt,f[N*N][N];
int gcd(int x,int y)
{
if(y==0)return x;
return gcd(y,x%y);
}
struct node
{
int l,r;
}a[N*N];
int cmp(node fi,node se)
{
return fi.r>se.r;
}
signed main()
{
freopen("parovi.in","r",stdin);
freopen("parovi.out","w",stdout);
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)if(gcd(i,j)==1)a[++cnt]=(node){i,j};
}
for(int i=1;i<=cnt;i++)
{
if(a[i].l==1)f[i][a[i].r]=1;
for(int j=1;j<=n;j++)
{
f[i][j]+=f[i-1][j];
f[i][j]%=mod;
if(a[i].l<=j)f[i][max(j,a[i].r)]+=f[i-1][j],f[i][max(j,a[i].r)]%=mod;
}
}
int ans=f[cnt][n];
printf("%lld",ans);
return 0;
}
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】