C. Multiplicity 简单数论+dp(dp[i][j]=dp[i-1][j-1]+dp[i-1][j] 前面序列要满足才能构成后面序列)+sort
2024-10-18 18:28:35
题意:给出n 个数 的序列 问 从n个数删去任意个数 删去的数后的序列b1 b2 b3 ......bk k|bk
思路: 这种题目都有一个特性 就是取到bk 的时候 需要前面有个bk-1的序列前置 这个时候暴力会多一个n 的复杂度
所以只要定义一个状态(j)表示选择了j个数 这个时候就可以转移到j+1 了
定义状态:dp[i][j] 前i个数 选择了j个
dp[i][j]=dp[i-1][j-1]+dp[i-1][j] ( j|a[i] ) 这个 选+不选
dp[i][j]=dp[i-1][j] ( j|a[i]不成立 )
这里无法用n^2的复杂度过 而 我们知道 一个数的因子数可以用sqrt(j)的时间求出来 但是j 和a[i]/j 两个因子的大小不确定 所以就会影响dp进程 因为dp要从j到j+1从小到大转移(因为二维开不下 需要滚动 不然可以随便顺序)
( 数的因子是很稀疏的 所以不会超时 )
#include<bits/stdc++.h>
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
#define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
#define F first
#define S second
#define pii pair<int ,int >
#define mkp make_pair
#define pb push_back
#define arr(zzz) array<ll,zzz>
#define ll long long
using namespace std;
const int maxn=1e6+;
const int inf=0x3f3f3f3f;
const int mod=1e9+;
int a[maxn];
int dp[+];
int main(){
int n;
scanf("%d",&n);
for(int i=;i<n;i++)scanf("%d",&a[i]);
ll ans=;
int p=;
dp[]=;
for(int i=;i<n;i++){
vector<int>v(sqrt(a[i]));
for(int j=;j*j<=a[i];j++){
if(a[i]%j==){
v.pb(j);
if(a[i]/j!=j)v.pb(a[i]/j);
}
}
sort(v.begin(),v.end(),[](int a,int b){return a>b;});
for(auto p:v){
dp[p]=(1ll*dp[p-]+dp[p])%mod;
}
}
for(int i=;i<=;i++)ans+=dp[i],ans%=mod;
cout<<ans<<endl;
return ;
}
最新文章
- ASP.NET MVC 5 - 给数据模型添加校验器
- Android Broadcast 和 iOS Notification
- react native 网络get请求方式参数不可为undefined或null
- grunt学习
- Redis常用数据类型
- Win7-IIS7下运行PHP网站(以配置好的drupal网站为例)
- PHP合并两张图片(水印)
- Java基础--Java---IO流------GUI(布局)、Frame、事件监听机制、窗体事件、Action事件、鼠标事件、对话框Dialog、键盘事件、菜单
- Python基础(reduce,filter,map函数)
- 【Scala篇】--Scala中的函数
- 使用Elasticsearch-dump迁移ES数据
- Rabbit原理理解
- iOS开发GCD(3)-数据安全
- install svn server in Ubuntu
- javaMail实现收发邮件(一)
- ssh无法访问服务器报“ssh-dss”认证错误
- PHP面向对象构造和析构函数
- 我在eclipse输出的第一个hello world!
- 【欢迎来怼】 Beta发布事后诸葛亮会议
- 整理两个PetaPoco连接SQLite数据库的方法
热门文章
- ArcGIS 网络分析[3] 发布NAServer到ArcGIS for Server(以Server 10.4为例)
- C# ArcEngine二次开发之动态图层
- gitbook 入门教程之使用 gitbook.com 在线开发电子书
- ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门
- mean项目的分模块开发
- c# winform多线程实时更新控件
- Oracle 12c RAC 安装文档
- drf 教程
- 目录命令(dir)
- C#基础知识之字符串比较方法:“==”操作符;RefernceEquals;String.Equals方法;String.Compare方法;String.CompareOrdinal方法。