题目描述

给定一个严格递增的序列T,求有多少个T的排列S满足:∑min(T[i],S[i])=k

输入输出格式

输入格式:

第一行两个数n,k

第二行n个数,表示T

输出格式:

一个正整数表示答案,答案对10^9+9取模

输入输出样例

输入样例#1:

5 10
1 2 3 4 5
输出样例#1:

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(变态考试题)的更多相关文章

  1. 水印第三版 ~ 变态水印(这次用Magick.NET来实现,附需求分析和源码)

    技能 汇总:http://www.cnblogs.com/dunitian/p/4822808.html#skill 以前的水印,只是简单走起,用的是原生态的方法.现在各种变态水印,于是就不再用原生态 ...

  2. 6个变态的C语言Hello World程序

    6个变态的C语言Hello World程序   下面的六个程序片段主要完成这些事情: 输出Hello, World 混乱C语言的源代码 下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C+ ...

  3. GGXX的卡通渲染实现 真的好变态......

    最近在youtube上看了GDC,学了很多东西,最让我震撼的就是ggxx的卡通渲染了.感慨一下,想要用3D做出二次元的效果,真的不容易.现记录一些要点: 1)不要使用normal map来做cel-s ...

  4. ACM 变态最大值

    变态最大值 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 Yougth讲课的时候考察了一下求三个数最大值这个问题,没想到大家掌握的这么烂,幸好在他的帮助下大家算是解 ...

  5. 44个 Javascript 变态题解析 (上\下)

    第1题 ["1", "2", "3"].map(parseInt) 知识点: Array/map Number/parseInt JavaS ...

  6. 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1067 好不爽,弄了一个晚上. 好不爽. 还是照着别人程序拍着看的!!! 噗 这题很变态. 首先,我没 ...

  7. linux之mysqlimport的哪些变态事儿

    mysqlimport是MySQL导入数据的工具,高效易用. 但掌握不透彻就会有一些变态事情.mysqlimport --host='laswebapp.mdb.game.yy.com' --port ...

  8. Java之HttpURLConnection的变态事: Keep-Alive

    HttpURLConnection的变态事: Keep-Alive JDK自带的HttpURLConnection默认启动Keep-Alive, 使用后的HttpURLConnection会放入池里重 ...

  9. 【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时才可以 ...

随机推荐

  1. CocoaPods 基础知识--------安装 及 使用第三方库

    极客学院:http://www.jikexueyuan.com/course/2665_2.html?ss=1

  2. RxSwift(一)

    文/iOS_Deve(简书作者) 原文链接:http://www.jianshu.com/p/429b5160611f 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者" ...

  3. SCOI2010 序列操作

    2421 序列操作 http://codevs.cn/problem/2421/ 2010年省队选拔赛四川   题目描述 Description lxhgww最近收到了一个01序列,序列里面包含了n个 ...

  4. GitHub 上下载单个文件夹

    写代码的一定经常去github上查看.下载一些源码,有时候会想下载一个项目中的一个文件夹里的内容,但是github上只提供了整个项目的下载,而整个项目里东西太多,压缩的文件太大,github的下载速度 ...

  5. installutil 安装windows service

    1:路径:C:\Windows\Microsoft.NET\Framework\v4.0.30319 2:执行指令:C:\Windows\Microsoft.NET\Framework\v4.0.30 ...

  6. vue组件详解(二)——使用props传递数据

    在 Vue 中,父子组件的关系可以总结为 props向下传递,事件向上传递.父组件通过 props 给子组件下发数据,子组件通过事件给父组件发送消息.看看它们是怎么工作的.  一.基本用法 组件不仅仅 ...

  7. java 实现多文件打包下载

    jsp页面js代码: function downloadAttached(){ var id = []; id.push(infoid); var options = {}; options.acti ...

  8. 新概念英语(1-97)A Small Blue Case

    Lesson 97 A small blue case 一只蓝色的小箱子 Listen to the tape then answer this question. Does Mr. Hall get ...

  9. hadoop2.6.0实践:A02 问题处理 util.NativeCodeLoader: Unable to load native-hadoop library for your platform

    ############################################################# hadoop "util.NativeCodeLoader: Un ...

  10. JWT(JSON Web Token) 多网站的单点登录,放弃session

    多个网站之间的登录信息共享, 一种解决方案是基于cookie - session的登录认证方式,这种方式跨域比较复杂. 另一种替代方案是采用基于算法的认证方式, JWT(json web token) ...