bzoj1925(SCOI2010)地精部落
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1925
要怎样才能想出正解呢?
当然有一维表示从1到 i 。
发现最后是递增的方案数=最后是递减的方案数,因为其实按值把 j 变成 i - j + 1 就行了。所以记一个递增或递减,ans*=2就行了。
指定新来一个数只能加到末尾,所以第二维记录末尾的数是 j 且是递增或递减;
如果新来的数只能加到末尾,怎么保证求了所有情况?
需要换个想法:不是前 i 个数,而是前n个数里的 i 个数;不是末尾是 j ,而是末尾是第 j 小的数。
因为最后会求满n个数,所以前期不用乘什么(比如1324不用乘什么来涵盖2435,因为在一共有n个数的时候,5就会出现在后面了)。
这样好像就不错了。
怎么推?来自阿当学长的博客:https://blog.csdn.net/aarongzk/article/details/44871391
发现递增和递减之间有两个关系:如果用f [ ] [ ]表示最后递增,g [ ] [ ] 表示最后递减,则
f [ i ] [ j ] = ∑(k∈[1,j-1])g [ i-1 ] [ k ];g [ i ] [ j ] = f [ i ] [ i - j + 1 ];
于是 f [ i ] [ j ] = ∑(k∈[1,j-1]) f [ i - 1 ] [ i - j ];
即 f [ i ] [ j ] = ∑(k∈[i-1,i-j+1]) f [ i - 1 ] [ k ];
发现f [ i ] [ j-1 ] = ∑(k∈[i-1,i-j+2]) f [ i - 1 ] [ k ];
所以f [ i ] [ j ] = f [ i ] [ j - 1 ] + f [ i - 1 ] [ i - j + 1 ];
真是太美好了。
但是自己怎么才能想出来呢?
首先第二维按套路应该记一个具体的数。然后发现递增和递减的微妙等价关系,于是设计两个数组表示递增和递减,最后推得美妙式子吗?
前提是思想灵活一点,就能知道可以指定新来的数加在最后面,进而得出种种状态设计吧。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=;
int n,p,f[][N],ans;
int main()
{
scanf("%d%d",&n,&p);
f[][]=;//因为f[1][1]=1
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)
f[i&][j]=(f[i&][j-]+f[(i-)&][i-j+])%p;
for(int j=;j<=n;j++)
(ans+=f[n&][j])%=p;
(ans<<=)%=p;
printf("%d",ans);
return ;
}
最新文章
- jQuery的基本用法:
- Junit的最简单样例:Hello world!
- Linux --->; 简单socket
- Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置
- Spring+SpringMVC+Mybatis 利用AOP自定义注解实现可配置日志快照记录
- 关于margin-top失效的解决方法
- 关于C++的变量和类的声明和定义
- Linux学习之sudo命令
- re 学习随便
- Spring 高级依赖注入方式
- Ceph万兆内网与系统万兆迁移
- [AST实战]从零开始写一个wepy转VUE的工具
- EF和Dapper之争的关键
- 使用FLASK+winscp在服务器端发布一个表白网页
- 第四篇:记录相关操作 SQL逻辑查询语句执行顺序
- MongoDB pymongo模块
- javascript AOP(面向切面编程)
- PyQt5--QPixmap
- 使用Git进行本地提交后,未上传提交,却不小心删除了本地提交或提交所在分支,怎么办?????
- ES6 class setTimeout promise async/await 测试Demo
热门文章
- 20145104张家明 《Java程序设计》第6周学习总结
- 2018-2019-1 20189215《Linux内核原理与分析》第二周作业
- 《Java程序设计》第三章-基础语法
- vs显示行号
- 如何使用AngularJS对表单提交内容进行验证
- 真实机下 ubuntu 18.04 安装GPU +CUDA+cuDNN 以及其版本选择(亲测非常实用)【转】
- ubuntu 18.04 64bit如何安装GPU版本tensorflow
- openwrt下使用wget出现Failed to allocate uclient context
- mysql Alter 的问题
- BZOJ 1951 【SDOI2010】 古代猪文