博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P2401 不等数列 题解
阅读量:4624 次
发布时间:2019-06-09

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

题解:

有题目得:这个题有巧做法而不是暴力模拟。废话

这个题看着像一道dp,因为可以由前一种(数据更小的推出数据更大的)推出后一种。

我们设已经得到了n-1个数的总方法(1~n-1),然后根据这个我们要推出1~n的方法,

于是我们考虑把新加入的一个数n枚举其插入位置,

因为每插入一个数,它一定比前面的任何数都大(从小到大)

如果插入到最左边,会造成新的序列比原来多一个大于号,如果插入到最右边,会造成新的序列比原来多一个小于号。

(注意是这个数插入到符号的位置)

如果插入到大于号的位置,删去一个大于号,多一个大于号一个小于号,也就是多一个小于号如果插入到小于号的位置,删去一个小于号,多一个大于号一个小于号,也就是多一个大于号

所以,dp方程如下:(其中mod=2015)

dp[i][j]=(dp[i-1][j]*(j+1)+dp[i-1][j-1]*(i-j))%mod;

所以AC代码如下:

#include
#include
#include
#include
#define mod 2015using namespace std;int n,k;int rqych[1002][1002];int read(){ int ans=0; char ch=getchar(),last=' '; while(ch<'0'||ch>'9')last=ch,ch=getchar(); while(ch>='0'&&ch<='9')ans=(ans<<3)+(ans<<1)+ch-'0',ch=getchar(); return last=='-'?-ans:ans;}int main(){
int i,j; n=read(),k=read(); for(i=1;i<=n;i++) rqych[i][0]=rqych[i][i-1]=1; for(i=2;i<=n;i++) for(j=1;j<=min(i-1,k);j++) rqych[i][j]=(rqych[i-1][j]*(j+1)+rqych[i-1][j-1]*(i-j))%mod; printf("%d",rqych[n][k]); return 0;}

完结

希望对大家有帮助

转载于:https://www.cnblogs.com/lbssxz/p/11166510.html

你可能感兴趣的文章
20190402——第一场UPC团队训练
查看>>
爱奇艺视频广告拦截失败,发文共商大计
查看>>
洛谷1144 最短路计数
查看>>
BZOJ 1207: [HNOI2004]打鼹鼠
查看>>
堆排序
查看>>
android下网络通信流程
查看>>
Spring+shiro session与线程池的坑
查看>>
Python基础学习笔记02之list
查看>>
jquery实现拖拽的效果
查看>>
JS 获取图片标签和所有的图片中的src的正则表达式
查看>>
jQuery:1.5.5.2,京东导航(当前默认设置)
查看>>
ASP.NET中 DetailsView(详细视图)的使用前台绑定
查看>>
我又情不自禁了——立方网的又一次加速度
查看>>
如何屏蔽国内IP访问我们的网站的一些方法!
查看>>
起与伏
查看>>
2.网络编程-udp
查看>>
Handlebars.js 模板引擎
查看>>
MySQL体系结构
查看>>
Nginx-日志切割
查看>>
219. Insert Node in Sorted Linked List【Naive】
查看>>