bzoj1925
来源:互联网 发布:中企动力域名转出 编辑:程序博客网 时间:2024/04/29 19:43
题目链接:bzoj1925
题解:
这个做法貌似和网上的做法很不一样,看来是我太弱了,代码比网上的做法要长一些。
这道题我想了比较久,最后想出了一个容易理解的做法。我们不妨设f[i][1/0]表示i个数构成波动数列,开头是上升/下降的方案数,我们可以通过枚举第i个数的位置,第i个数肯定是波峰,这是可以确定的,从而我们可以知道i前面的数列和后面的数列的形态,这样我们就可以计算出第i个数在这个位置的方案了,举个栗子,数列开始是上升,i前面有l个,后面有r个,那么答案显然等于f[l][1]*f[r][1]*C(l,i-1)。以此类推,这样我们就可以在n^2的时间复杂度内解决这个问题。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <ctime>#include <cmath>#include <algorithm>#define lld long longusing namespace std;const int maxn=4211;lld f[maxn][2],c[2][maxn];int n,p;int get(int a,int b){ if (a%2==1) return b; return b^1;}int main(){ freopen("1925.in","r",stdin); freopen("1925.out","w",stdout); scanf("%d%d",&n,&p); f[1][0]=1; c[1][0]=1;c[1][1]=1; for (int i=2;i<=n;i++){ f[i][1]=f[i-1][0]; f[i][get(i-1,0)]=((lld)f[i][get(i-1,0)]+(lld)f[i-1][get(i-1,0)])%p; int now=i%2,last=(i+1)%2; for (int j=0;j<=i;j++){ c[now][j]=c[last][j]; if (j) c[now][j]=((lld)c[now][j]+(lld)c[last][j-1])%p; } for (int j=1;j<=i-2;j++) f[i][get(j,0)]=((lld)f[i][get(j,0)]+(((lld)f[j][get(j,0)]*(lld)f[i-1-j][0])%p*(lld)c[last][j])%p)%p; } if (n==1) printf("1\n"); else printf("%d\n",((lld)f[n][0]+(lld)f[n][1])%p); fclose(stdin); fclose(stdout); return 0;}
0 0
- bzoj1925
- bzoj1925【sdoi2010】地精部落
- 【SDOI2010】【BZOJ1925】地精部落
- BZOJ1925: [Sdoi2010]地精部落
- bzoj1925: [Sdoi2010]地精部落
- bzoj1925: [Sdoi2010]地精部落
- bzoj1925 地精部落
- BZOJ1925 地精部落
- bzoj1925 [Sdoi2010]地精部落
- BZOJ1925【动态规划】【组合数学】
- 【bzoj1925】【SCOI2009】【最长距离】【spfa】
- 动态规划 BZOJ1925 地精部落
- bzoj1925 [Sdoi2010]地精部落(dp)
- [Bzoj1925]&[SDOI2010]地精部落 DP
- 【SDOI】【DP】【滚动数组】【bzoj1925】地精部落
- bzoj1925(next_permutation的第一次运用,难dp)
- [BZOJ1925][SDOI2010]地精部落-动态规划
- bzoj1925 [Sdoi2010]地精部落(抖动序列)
- Preprocessor Macros添加无效
- iOS开发 -- 常见坑(模拟器运行没有错误,真机运行有,但是还能运行, Not a PNG file..)
- Android拍照Camera(二)
- Notification bar icon turns white in Android 5 Lollipop
- oracle 数据库的建表以及字段的增删改查
- bzoj1925
- doT.js的基本使用
- javascript中的静态和非静态使用
- Android开发学习之路--异步消息Handler,Message,Looper和AsyncTask之初体验
- PHP编程效率的20个要点
- window和Linux双系统,如何卸载其中之一
- Android编程编码规范
- navigationController
- 栈和队列(C语言版)