2018.09.15点名器(简单dp)
描述
Ssoier在紧张的学习中,杜老师每天给他们传授精妙的知识。
杜老师为了活跃气氛,设计了一个点名器,这个点名器包含一个长度为M的数组(下标1开始),每个元素是一个oier的名字,每次点名的时候,点名器会等概论随机生成一个1到M的整数,对应的人就要回答问题。当然杜老师有喜欢的人,他会故意让一些名字重复出现以增加某些人被点中的概率。
LDX感觉不是很好,他不希望被点中。他找到杜老师,不过杜老师表示他确实喜欢ldx,不过杜老师还是想给ldx一点好处,他被点名器的数组给ldx看,然后让ldx对数组进行T此修改,每次修改LDX选择的某个位置的名字,然后把他改成其他oier的名字(一定是换成另外人的名字,不允许不修改)。LDX希望让自己在点名器的出现次数不超过K。
请你帮帮LDX计算有多少种满足条件的修改方案。两个方案不同当且仅当存在i,两方案中的第i次修改操作不同。答案对1e9+7取模。
输入
为了简化问题,为每个OIer分配一个1 到N 的整数。zgs是1号。
第一行三个整数N,M,T,K,含义如上。
接下来一行M 个整数表示数组元素对应的选手编号
输出
输出一行一个整数表示答案。
样例输入
2 3 1 0
2 2 2
样例输出
0
提示
对于20% 的数据,N,M,T <= 10。
对于50% 的数据,N,M,T<= 50。
对于70% 的数据,N,M,T<=200
对于100% 的数据,1<=M,T<=2000; 2<=N<=10^9; 0<=K<=M。
这是一个简单的dp。
直接f[i][j]" role="presentation" style="position: relative;">f[i][j]f[i][j]表示前i轮剩下j个数值为1的方案数量。
显然f[i][j]只与f[i-1][j],f[i-1][j-1],f[i-1][j+1]有关。
随便转移就能过了。
代码:
#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
#define N 2005
using namespace std;
inline ll read(){
ll ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
ll n,m,t,k,a[N],f[N][N],ans=0,cnt=0;
int main(){
n=read(),m=read(),t=read(),k=read();
for(ll i=1;i<=m;++i){a[i]=read();if(a[i]==1)++cnt;}
f[0][cnt]=1;
for(ll i=1;i<=t;++i){
for(ll j=m;~j;--j){
f[i][j]=(f[i-1][j+1]*(j+1)%mod*(n-1)%mod+f[i-1][j]*(m-j)%mod*(n-2)%mod)%mod;
if(j)(f[i][j]+=f[i-1][j-1]*(m-j+1))%=mod;
}
}
for(int i=k;~i;--i)(ans+=f[t][i])%=mod;
cout<<ans;
return 0;
}
2018.09.15点名器(简单dp)的更多相关文章
- Lean Data Innovation Sharing Salon(2018.09.15)
时间:2018.09.15地点:北京国华投资大厦
- 4.15 每周作业 —— 简单DP
免费馅饼 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submissi ...
- 2018.09.01 poj3071Football(概率dp+二进制找规律)
传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)" role=" ...
- 2018.09.01 独立集(树形dp)
描述 给定一颗树(边权为1),选取一个节点子集,使得该集合中任意两个节点之间的距离都大于K.求这个集合节点最多是多少 输入 第一行是两个整数N,K 接下来是N-1行,每行2个整数x,y,表示x与y有一 ...
- 2018.09.15 hdu3018Ant Trip(欧拉路)
传送门 显然答案等于各个连通分量的笔画数之和. 因此我们dfs每个连通分量计算对答案的贡献. 对于一个连通分量,如果本来就有欧拉回路那么只需要一笔. 否则需要寄点数/2那么多笔才能画完. 知道这个结论 ...
- 2018.09.15模拟总结(T1,T3)
过了一周,终于迎来了第二次模拟(这不是期待的语气),看第一周毒瘤程度,我就觉得接下来的模拟只能更毒瘤. 花了10多分钟读完了三道题,觉得暴力还是挺好写的,然后在每一道题都思索那么几分钟后,觉得还是写暴 ...
- hdu 2018 母牛的故事(简单dp)
母牛的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 2018.09.15 poj1734Sightseeing trip(floyd求最小环)
跟hdu1599差不多.. 只是需要输出方案. 这个可以递归求解. 代码: #include<iostream> #include<cstdio> #include<cs ...
- 2018.09.15 hdu1599find the mincost route(floyd求最小环)
传送门 floyd求最小环的板子题目. 就是枚举两个相邻的点求最小环就行了. 代码: #include<bits/stdc++.h> #define inf 0x3f3f3f3f3f3f ...
随机推荐
- 我对if(!this.IsPostBack)的理解
if(!this.IsPostBack) { } 通常用在page_load中,获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问,如果是为响应客户端回发而加载该页,则 ...
- web常见攻击
DoS和DDoS攻击 DoS(Denial of Service),即拒绝服务,造成远程服务器拒绝服务的行为被称为DoS攻击.其目的是使计算机或网络无法提供正常的服务.最常见的DoS攻击有计算机网络带 ...
- cmd查看电脑是32位还是64位
代码如下 @echo off if "%PROCESSOR_ARCHITECTURE%" == "AMD64" ( echo OS is 64bit) EL ...
- 机器学习入门-贝叶斯中文新闻分类任务 1. .map(做标签数字替换) 2.CountVectorizer(词频向量映射) 3.TfidfVectorizer(TFDIF向量映射) 4.MultinomialNB()贝叶斯模型构建
1.map做一个标签的数字替换 2.vec = CountVectorizer(lowercase=False, max_features=4000) # 从sklean.extract_featu ...
- ArcGIS案例学习笔记2_2
ArcGIS案例学习笔记2_2 联系方式:谢老师,135_4855_4328,xiexiaokui#qq.com 时间:第二天下午 2018年8月12日 案例1:模型构建器,山顶点提取 背景:数据量大 ...
- PCA原理(转)
PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...
- python文件的只读,只写操作
只读:r rb(bytes类型数据) 只写:w wb(bytes类型数据) 在文件最后追加: f = open('log',mode='a',encoding='utf-8') f.write('这里 ...
- Gradle with Android
[Gradle with Android] The Android Studio build system is based on Gradle, and the Android plugin for ...
- mysql开通tcp远程连接
1.登陆mysql: mysql -u root mysql 2.运行下面命令 UPDATE `mysql`.`user` SET `Host` = '%' WHERE `user`.`Host` = ...
- 每月IT摘录201808--201809
一.技术 海量数据的解决方案: 使用缓存: 页面静态化技术: 数据库优化: 分离数据库中活跃的数据: 批量读取和延迟修改: 读写分离: 使用NoSQL和Hadoop等技术: 分布式部署数据库: 应用服 ...