博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1925: [Sdoi2010]地精部落( dp )
阅读量:5322 次
发布时间:2019-06-14

本文共 1786 字,大约阅读时间需要 5 分钟。

dp(i,j)表示1~i的排列中, 以1~j为开头且开头是下降的合法方案数

这种数列具有对称性, 即对于一个满足题意且开头是上升的n的排列{an}, 令bn = n-an+1, 那么{bn}就是一个满足题意且开头是下降的序列 

dp(i,j) = dp(i,j-1) + dp(i-1,i-j+1). 前一个好理解, 就是求排列i, 1~j-1开头的, 后一种就是求以j开头, 那么原来的排列i-1应该以1~j-1开头, 但是开头又得是上升的(这样加上j后才会符合题意), 所以就是dp(i-1,(i-1)-(j-1)+1)

最后答案*2(算上开头上升的),  用滚动数组. 时间复杂度O(N2), 空间复杂度O(N)

--------------------------------------------------------------------------

#include<bits/stdc++.h>
 
using namespace std;
 
const int maxn = 4209;
 
int N, MOD, dp[2][maxn];
 
int main() {
scanf("%d%d", &N, &MOD);
memset(dp, 0, sizeof dp);
int c = 0, p = 1;
dp[c][1] = 1;
for(int i = 2; i <= N; i++) {
swap(c, p);
memset(dp[c], 0, sizeof dp[c]);
for(int j = 1; j <= i; j++) {
dp[c][j] = dp[c][j - 1] + dp[p][i - j + 1];
if(dp[c][j] >= MOD)
dp[c][j] -= MOD;
}
}
int ans = 0;
for(int i = 1; i <= N; i++)
if((ans += dp[c][i]) >= MOD) ans -= MOD;
printf("%d\n", (ans << 1) % MOD);
return 0;
}

-------------------------------------------------------------------------- 

 

 

1925: [Sdoi2010]地精部落

Time Limit: 10 Sec  
Memory Limit: 64 MB
Submit: 965  
Solved: 580
[ ][ ][ ]

Description

传说很久以前,大地上居住着一种神秘的生物:地精。 地精喜欢住在连绵不绝的山脉中。具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N 之间的正 整数。 如果一段山脉比所有与它相邻的山脉都高,则这段山脉是一个山峰。位于边 缘的山脉只有一段相邻的山脉,其他都有两段(即左边和右边)。 类似地,如果一段山脉比所有它相邻的山脉都低,则这段山脉是一个山谷。 地精们有一个共同的爱好——饮酒,酒馆可以设立在山谷之中。地精的酒馆 不论白天黑夜总是人声鼎沸,地精美酒的香味可以飘到方圆数里的地方。 地精还是一种非常警觉的生物,他们在每座山峰上都可以设立瞭望台,并轮 流担当瞭望工作,以确保在第一时间得知外敌的入侵。 地精们希望这N 段山脉每段都可以修建瞭望台或酒馆的其中之一,只有满足 这个条件的整座山脉才可能有地精居住。 现在你希望知道,长度为N 的可能有地精居住的山脉有多少种。两座山脉A 和B不同当且仅当存在一个 i,使得 Ai≠Bi。由于这个数目可能很大,你只对它 除以P的余数感兴趣。

Input

仅含一行,两个正整数 N, P。

Output

仅含一行,一个非负整数,表示你所求的答案对P取余 之后的结果。

Sample Input

4 7

Sample Output

3

HINT

 
对于 20%的数据,满足 N≤10; 
对于 40%的数据,满足 N≤18; 
对于 70%的数据,满足 N≤550; 
对于 100%的数据,满足 3≤N≤4200,P≤109

Source

 

转载于:https://www.cnblogs.com/JSZX11556/p/4841957.html

你可能感兴趣的文章
BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊(LCT)
查看>>
Linux分区问题
查看>>
封装的ajax
查看>>
WP8 学习 Onnavigatedto和OnnavigatedFrom的区别
查看>>
java中Comparator接口的用法
查看>>
《Effective C#》读书笔记——条目3:推荐使用is或as而不是强制转换类型<C#语言习惯>...
查看>>
开发积累—泛型工具类
查看>>
iOS项目开发实战——制作视图的缩放动画
查看>>
关于在jquery动态修改css,html中,mouseenter,mouseleave,click等方法失效的处理
查看>>
[翻译] java NIO 教程---介绍
查看>>
Java开发小技巧(一)
查看>>
第二天简书
查看>>
iptables 用法
查看>>
POJ 3670 DP LIS?
查看>>
空心菱形的显示
查看>>
Eclipse 常用快捷键清单
查看>>
ELK Stack (2) —— ELK + Redis收集Nginx日志
查看>>
ElasticSearch 2 (19) - 语言处理系列之故事开始
查看>>
redis 存储时间区间的数据
查看>>
STM32F0库函数初始化系列:进入STOP模式,外部中断唤醒
查看>>