动态规划训练之二十
https://www.luogu.org/problem/P1370 题目大意:Σ(1<=l<=r<=n)F(l, r),其中F(l,r)表示[l,r]之间的本质不同的子序列有多少个 分析: 如果本题数据是N^2^的话我就会做,但是要求是O(n)求出 同样的 区间计数题 , 固定端点L ,再 考虑dp 设dp[i]表示F[i,i]+F[i,i+1]+F[i,i+2]+....+F[i,n] 如果没有重复的数字话 dp[i]=(dp[i+1]<<1)+2 意思是: dp[i+1]= F[i+1,i+1]+F[i+1,i+2]+F[i+1,i+3]+....+F[i+1,n] dp[i]= F[i,i]+ F[i,i+1]+ F[i,i+2]+ F[i,i+3] +....+ F[i,n] 相信一看就懂把 但是有重复怎么办? 若ai==aj(i<j) 则dp[i]-=dp[j+1]+1; 原因是 后面所有的F[j+1,j+1].....都会有一次重复(接ai,接aj) 那个1就是F[j,j]中选j或不选j中的选j的方案 code(代码懒得打了): #include<bits/stdc++.h> using namespace std; #define ll long long #define mod 998244353 #ifdef ONLINE_JUDGE char *TT,*mo