permu(变态考试题)
题目描述
给定一个严格递增的序列T,求有多少个T的排列S满足:∑min(T[i],S[i])=k
输入输出格式
输入格式:
第一行两个数n,k
第二行n个数,表示T
输出格式:
一个正整数表示答案,答案对10^9+9取模
输入输出样例
5 10
1 2 3 4 5
24
说明
30%的数据n<=10
100%的数据 输入中所有数字为不超过50的正整数,k<=2500
题解:动态规划
正常的思路会想到状态压缩或暴力搜索,可以利用那个min变成普通的动归
f[i][j][k]表示前i位,还有j个数未匹配,和为k的方案数
情况1:与自己匹配,f[i+1][j][k+t[i+1]]+=f[i][j][k]
情况2:与后面的数匹配,因为严格递增,所以f[i+1][j+1][k+2*t[i+1]]+=f[i][j][k]
情况3:与前面的数匹配,再用前面的数匹配自己,f[i+1][j-1][k]+=f[i][j][k]*j*j
解释:把当前数往前匹配有j种方案,把前面的数往当前匹配有j种,根据乘法原理可知
情况4:与前面的数匹配,自己不匹配,f[i+1][j][k+t[i+1]]+=f[i][j][k]*j
解释:与前面的数匹配有j种,为什么不算后面的数,假设所有l>i且匹配了i
因为对于l,3,4情况已经算了i,所以f[l][j][k]包含了l匹配i的方案,无需重复计算
为方便定义,规定只考虑往前的匹配种数
本蒟蒻考试时完全不会,不像yzh大佬
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long f[][][];
int Mod=;
int n,k,t[];
int main()
{int i,j,l;
cin>>n>>k;
for (i=;i<=n;i++)
{
scanf("%d",&t[i]);
}
f[][][]=;
for (i=;i<n;i++)
{
for (j=;j<=i;j++)
{
for (l=;l<=k;l++)
if (f[i][j][l])
{
f[i+][j][l+t[i+]]=(f[i+][j][l+t[i+]]+f[i][j][l])%Mod;
f[i+][j+][l+*t[i+]]=(f[i+][j+][l+*t[i+]]+f[i][j][l])%Mod;
if (j) f[i+][j-][l]=(f[i+][j-][l]+f[i][j][l]*j*j)%Mod;
f[i+][j][l+t[i+]]=(f[i+][j][l+t[i+]]+f[i][j][l]*j*)%Mod;
}
}
}
cout<<f[n][][k];
}
permu(变态考试题)的更多相关文章
- 水印第三版 ~ 变态水印(这次用Magick.NET来实现,附需求分析和源码)
技能 汇总:http://www.cnblogs.com/dunitian/p/4822808.html#skill 以前的水印,只是简单走起,用的是原生态的方法.现在各种变态水印,于是就不再用原生态 ...
- 6个变态的C语言Hello World程序
6个变态的C语言Hello World程序 下面的六个程序片段主要完成这些事情: 输出Hello, World 混乱C语言的源代码 下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C+ ...
- GGXX的卡通渲染实现 真的好变态......
最近在youtube上看了GDC,学了很多东西,最让我震撼的就是ggxx的卡通渲染了.感慨一下,想要用3D做出二次元的效果,真的不容易.现记录一些要点: 1)不要使用normal map来做cel-s ...
- ACM 变态最大值
变态最大值 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 Yougth讲课的时候考察了一下求三个数最大值这个问题,没想到大家掌握的这么烂,幸好在他的帮助下大家算是解 ...
- 44个 Javascript 变态题解析 (上\下)
第1题 ["1", "2", "3"].map(parseInt) 知识点: Array/map Number/parseInt JavaS ...
- 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)
http://www.lydsy.com/JudgeOnline/problem.php?id=1067 好不爽,弄了一个晚上. 好不爽. 还是照着别人程序拍着看的!!! 噗 这题很变态. 首先,我没 ...
- linux之mysqlimport的哪些变态事儿
mysqlimport是MySQL导入数据的工具,高效易用. 但掌握不透彻就会有一些变态事情.mysqlimport --host='laswebapp.mdb.game.yy.com' --port ...
- Java之HttpURLConnection的变态事: Keep-Alive
HttpURLConnection的变态事: Keep-Alive JDK自带的HttpURLConnection默认启动Keep-Alive, 使用后的HttpURLConnection会放入池里重 ...
- 【DP】permu
permu [Description] 给定两个1~N的全排列A,B.有两个指针q和p,一开始q.p都为0,可执行以下三种操作: 1.q+1:2.p+1:3.q+1且p+1(Aq+1≠Bp+1时才可以 ...
随机推荐
- CocoaPods 基础知识--------安装 及 使用第三方库
极客学院:http://www.jikexueyuan.com/course/2665_2.html?ss=1
- RxSwift(一)
文/iOS_Deve(简书作者) 原文链接:http://www.jianshu.com/p/429b5160611f 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者" ...
- SCOI2010 序列操作
2421 序列操作 http://codevs.cn/problem/2421/ 2010年省队选拔赛四川 题目描述 Description lxhgww最近收到了一个01序列,序列里面包含了n个 ...
- GitHub 上下载单个文件夹
写代码的一定经常去github上查看.下载一些源码,有时候会想下载一个项目中的一个文件夹里的内容,但是github上只提供了整个项目的下载,而整个项目里东西太多,压缩的文件太大,github的下载速度 ...
- installutil 安装windows service
1:路径:C:\Windows\Microsoft.NET\Framework\v4.0.30319 2:执行指令:C:\Windows\Microsoft.NET\Framework\v4.0.30 ...
- vue组件详解(二)——使用props传递数据
在 Vue 中,父子组件的关系可以总结为 props向下传递,事件向上传递.父组件通过 props 给子组件下发数据,子组件通过事件给父组件发送消息.看看它们是怎么工作的. 一.基本用法 组件不仅仅 ...
- java 实现多文件打包下载
jsp页面js代码: function downloadAttached(){ var id = []; id.push(infoid); var options = {}; options.acti ...
- 新概念英语(1-97)A Small Blue Case
Lesson 97 A small blue case 一只蓝色的小箱子 Listen to the tape then answer this question. Does Mr. Hall get ...
- hadoop2.6.0实践:A02 问题处理 util.NativeCodeLoader: Unable to load native-hadoop library for your platform
############################################################# hadoop "util.NativeCodeLoader: Un ...
- JWT(JSON Web Token) 多网站的单点登录,放弃session
多个网站之间的登录信息共享, 一种解决方案是基于cookie - session的登录认证方式,这种方式跨域比较复杂. 另一种替代方案是采用基于算法的认证方式, JWT(json web token) ...