CCPC-Wannafly Winter Camp Day1 (Div2, onsite) I 起起落落 [DP]

DP

样例1
5
4 2 3 1 5
输出 1

序列 是3个数字的波浪折线
dp[ i ]表示以 i 结尾的子序列个数 遍历每个位置 i 记录可以作为中心点的个数k
j从i-1遍历之前处理过的答案
如果a[ j ] < a [ i ]那么他可以作为 i 的一个中点k++ 如果a[ j ] > a[ i ]那么以 j 结尾的子序列都可以接上k和 i 作为一个新子序列 并且j k i也是一个新子序列 dp[ i ] += (dp[ j ] + 1 ) * k

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxn = 2e3+10;
const int mod = 1e9+7;
int n,k;
ll dp[maxn];
int a[maxn];

int main() {
	cin>>n;
	for(int i=1; i<=n; i++) cin>>a[i];
	for(int i=3; i<=n; i++) {
		k=0;
		for(int j=i-1; j>=1; j--) {
			if(a[j]>a[i]) dp[i]+=(dp[j]+1)*k%mod,dp[i]%=mod;
			else k++;
		}
	}
	ll ans=0;
	for(int i=1;i<=n;i++) ans+=dp[i],ans%=mod;
	cout<<ans<<endl;
	return 0;
}
全部评论

相关推荐

10-30 16:31
重庆大学 Java
代码飞升_不回私信人...:你说你善于学习,大家都会说。你说你是985,985会替你表达一切
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
秋招吐槽大会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务