题:https://codeforces.com/contest/1061/problem/C

题意:给你一个序列,我们求他们子序列的个数,这个子序列有个限制就是每一个子序列上的值都必须是能整除他的下标,问有多少个

分析:考虑dp,我们先考虑二维的dp,定义dp[i][j]表示前i个数中,能从中提取出j个”好“序列,所以dp[i][j]就可以从dp[i-1][j-1]+dp[i-1][j]得来(前提是a[i]%j==0).显然a[i]%j!=0时dp[i][j]=dp[i-1][j]

   但这样写会MLE,所以我们将这个二维数组压缩。我们发现,我们只是在a[i]%j==0的条件下才有更新值,也就相当于前缀和,所以我们只对因子进行更新,dp[j]=dp[j]+dp[j-1]

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
typedef long long ll;
const int M=1e5+;
const int mod=1e9+;
vector<int>a[M];
ll b[M],dp[M];
stack<int>sta;
void solve(int x){
int temp=b[x];
for(int i=;i*i<=temp;i++){
if(temp%i!=)
continue;
if(i*i==temp)
a[x].pb(i);
else
a[x].pb(i),sta.push(temp/i);
}
while(!sta.empty()){
a[x].pb(sta.top());
sta.pop();
}
}
int main(){
int n;
cin>>n;
for(int i=;i<n;i++){
scanf("%lld",&b[i]);
solve(i);
}
dp[]=;
for(int i=;i<n;i++){
for(int j=a[i].size()-;j>=;j--){
int temp=a[i][j];
if(temp<=n&&dp[temp-]){
dp[temp]=(dp[temp]+dp[temp-])%mod;
}
}
}
ll ans=;
for(int i=;i<=n;i++)
ans+=dp[i],ans%=mod;
cout<<ans<<endl;
}

Codeforces Round #523 (Div. 2) Cdp的更多相关文章

  1. Codeforces Round #523 (Div. 2)

    Codeforces Round #523 (Div. 2) 题目一览表 来源 考察知识点 完成时间 A Coins cf 贪心(签到题) 2018.11.23 B Views Matter cf 思 ...

  2. Codeforces Round #523 (Div. 2) E. Politics(最小费+思维建图)

    https://codeforces.com/contest/1061/problem/E 题意 有n个点(<=500),标记第i个点的代价a[i],然后分别在这n个点建两棵树,对于每颗树的每个 ...

  3. Codeforces Round #523 (Div. 2) F. Katya and Segments Sets (交互题+思维)

    https://codeforces.com/contest/1061/problem/F 题意 假设存在一颗完全k叉树(n<=1e5),允许你进行最多(n*60)次询问,然后输出这棵树的根,每 ...

  4. Codeforces Round #523 (Div. 2) D. TV Shows 模拟(多重集 先把所有区间加入多重集合)+贪心+二分

    题意:给出n个电视节目的起始和结束时间  并且租一台电视需要x +y*(b-a)  [a,b]为时段 问完整看完电视节目的最小花费是多少 思路:贪心的思想 情况1 如果新租一台电视的花费<=在空 ...

  5. Codeforces Round #523 (Div. 2) D. TV Shows

    传送门 https://www.cnblogs.com/violet-acmer/p/10005351.html 题意: 有n个节目,每个节目都有个开始时间和结束时间. 定义x,y分别为租电视需要的花 ...

  6. Codeforces Round #523 (Div. 2) B Views Matter

    传送门 https://www.cnblogs.com/violet-acmer/p/10005351.html 这是一道贪心题么???? 题意: 某展览馆展览一个物品,此物品有n堆,第 i 堆有a[ ...

  7. Codeforces Round #523 (Div. 2) C Multiplicity (DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/10005351.html 题意: 给定一数组a[],从a[ ]中除去任意个元素得到b[ ],求能形成多少“好序列 ...

  8. Codeforces Round #523 (Div. 2) C. Multiplicity

    C. Multiplicity 题目链接:https://codeforc.es/contest/1061/problem/C 题意: 给出一串数,问它的“好序列“有多少.好序列的定义是,首先是一个子 ...

  9. Codeforces Round #523 (Div. 2) Solution

    A. Coins Water. #include <bits/stdc++.h> using namespace std; int n, s; int main() { while (sc ...

随机推荐

  1. jetty启动项目后js修改后无法保存

    在web.xml中加入如下配置即可: <servlet> <servlet-name>default</servlet-name> <servlet-clas ...

  2. MySQL-复制技术演进过程

    复制技术的演进可以分为:基于数据安全的复制,基于效率的复制 基于数据安全的复制 异步复制 参考: https://baijiahao.baidu.com/s?id=163939455634386120 ...

  3. MySQL数据库的数据类型

    1.整数型 2.日期和时间类型 3.字符串类型

  4. h5-transform二维变换

    1.html <div class="translate">1</div> <div class="scale">2< ...

  5. 深入理解 Java —— GC 机制

    1. 基础知识 1.1 什么是垃圾回收? 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导致内存溢出,所以对内存资源的管理非常重要. 垃圾回收就是对这些无效资 ...

  6. JavaScript 之 "for"的衍生对象

    JavaScript for/in 语句 作用:for/in 语句用于遍历循环对象属性. 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作. 例子: 循环对象属性: var pers ...

  7. 给rar文件加个自定义头

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  8. 动态加载JS文件方法总结

    1.JQuery方法 $.getScript("./test.js"); //加载js文件 $.getScript("./test.js",function() ...

  9. java8中的map 和reduce

    map 1.使用map让集合里面的数字翻倍. List<Integer> numbers = Lists.newArrayList(1,2,3,4,5);List<Integer&g ...

  10. NSDictionary和NSMaptable, NSArray,NSSet,NSOrderedSet和NSHashTable的区别

    NSSet, NSDictionary, NSArray是Foundation框架关于集合操作的常用类, 和其他标准的集合操作库不同, 他们的实现方法对开发者进行隐藏, 只允许开发者写一些简单的代码, ...