BZOJ 1996 合唱队(DP)
2024-08-27 21:55:00
考虑从最后的队形开始依次还原最初的队形。
对于当前的队形,要么选最左边的,要么选最右边的。 如果选了左边的,那么下次选择的一定是大于它的。右边的同理。
所以定义dp[mark][l][r]为区间[l,r]的选择状态为mark的方法数。
然后记忆化搜索一下就可以了。
# include <cstdio>
# include <cstring>
# include <cstdlib>
# include <iostream>
# include <vector>
# include <queue>
# include <stack>
# include <map>
# include <set>
# include <cmath>
# include <algorithm>
using namespace std;
# define lowbit(x) ((x)&(-x))
# define pi 3.1415926535
# define eps 1e-
# define MOD
# define INF
# define mem(a,b) memset(a,b,sizeof(a))
# define FOR(i,a,n) for(int i=a; i<=n; ++i)
# define FO(i,a,n) for(int i=a; i<n; ++i)
# define bug puts("H");
# define lch p<<,l,mid
# define rch p<<|,mid+,r
# define mp make_pair
# define pb push_back
typedef pair<int,int> PII;
typedef vector<int> VI;
# pragma comment(linker, "/STACK:1024000000,1024000000")
typedef long long LL;
int Scan() {
int res=, flag=;
char ch;
if((ch=getchar())=='-') flag=;
else if(ch>=''&&ch<='') res=ch-'';
while((ch=getchar())>=''&&ch<='') res=res*+(ch-'');
return flag?-res:res;
}
void Out(int a) {
if(a<) {putchar('-'); a=-a;}
if(a>=) Out(a/);
putchar(a%+'');
}
const int N=;
//Code begin... int dp[][N][N], a[N]; int dfs(int mark, int l, int r){
if (~dp[mark][l][r]) return dp[mark][l][r];
if (l==r) return dp[mark][l][r]=;
int res=;
if (mark) {
if (a[l]<a[r]) res+=dfs(,l,r-);
if (r-!=l&&a[r-]<a[r]) res+=dfs(,l,r-);
}
else {
if (a[r]>a[l]) res+=dfs(,l+,r);
if (l+!=r&&a[l+]>a[l]) res+=dfs(,l+,r);
}
return dp[mark][l][r]=res%MOD;
}
int main ()
{
mem(dp,-);
int n;
scanf("%d",&n);
FOR(i,,n) scanf("%d",a+i);
printf("%d\n",(dfs(,,n)+dfs(,,n))%MOD);
return ;
}
最新文章
- 分享:写了一个 java 调用 C语言 开发的动态库的范例
- MangoDB的C#Driver驱动简单例子
- php基础篇-二维数组排序 array_multisort
- JS的三种弹框
- [开发笔记]-使用jquery获取url及url参数的方法
- JS之事件(一)
- 动态获取爱奇艺上传视频mp4格式url地址
- POJ 2762 Going from u to v or from v to u?(强联通 + TopSort)
- PC-常见问题-清除浮动
- 【js数据结构】栈解决括号不匹配问题
- STM32高级定时器TIM1产生两路互补的PWM波(带死区)
- 【Spark篇】--Spark中的宽窄依赖和Stage的划分
- c# 三种传参方式 in,out,ref
- Flutter之MaterialApp使用详解
- GitHub18
- hdu 4707 仓鼠 记录深度 (BFS)
- <;--------------------------构造方法------------------------------>;
- jquery ajax error函数和及其参数详细说明(转载)
- J2EEweb开发中的缓存问题的研究
- Android Studio SVN使用