第22次CSP第四题
2021/4/27 18:58:18
本文主要是介绍第22次CSP第四题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
链接:http://118.190.20.162/view.page?gpid=T125
思路:DP,选择类题目考虑DP
f[i]定义为前i项中种树的种类数目,f[i]=(f[j]*cnt)(0<=j<i,cnt为[j,i)的种类数),由于题目中不允许把树种在已经存在的位置,对于[j,i),j是已经存在的位置,所以往左遍历的时候,[j',i)中的树不能种在j上,即可以通过一个数组st来标记在[j,i)中满足条件的因子k和b(b=j-i,也是不满足的条件),来防止出现多算了cnt的数目。
思路来自acwing讲解
代码:
#include<bits/stdc++.h> using namespace std; const int N=1010,M=100010,mod=(int)1e9+7; int a[N],f[N]; bool st[M]; vector<int> ve[M]; int main (){ ios::sync_with_stdio(false); for(int i=1;i<M;i++) for(int j=i*2;j<M;j+=i) ve[j].push_back(i); int n; cin>>n; f[0]=1; for(int i=0;i<n;i++)cin>>a[i]; for(int i=1;i<n;i++){ memset(st,0,sizeof st); for(int j=i-1;j>=0;j--){ int b=a[i]-a[j]; int cnt=0; for(int k:ve[b]){ if(!st[k]){ cnt++; st[k]=true; } } st[b]=true;// f[i]=(f[i]+1LL*cnt*f[j]%mod)%mod; } } cout<<f[n-1]; return 0; }
这篇关于第22次CSP第四题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升