【JZOJ 4345】【WC2016模拟】Fountain
来源:互联网 发布:手机倒啤酒软件 编辑:程序博客网 时间:2024/06/06 11:16
Description
Solution
考虑暴力
设:
答案显然是
写出这个式子考虑转成DP:
设:f[i][j][k][l],表示从大到小做到第i个,当前有j个空隙必须放点,sum为k,l为0/1/2,表示确认了几个端点(最左和最右确认没有),
转移就比较好推了,
复杂度:
Code
#include <cstdio>#include <algorithm>#define fo(i,a,b) for(int i=a;i<=b;++i)#define fod(i,a,b) for(int i=a;i>=b;--i)#define min(q,w) ((q)>(w)?(w):(q))#define max(q,w) ((q)<(w)?(w):(q))using namespace std;typedef long long LL;const int N=43,mo=1e9+7;int read(int &n){ char ch=' ';int q=0,w=1; for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar()); if(ch=='-')w=-1,ch=getchar(); for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;n=q*w;return n;}int m,n;LL ans;int a[N];int f[N][N][N*N*2][3];LL jc[100500],jcn[100500];LL ksm(LL q,int w){ LL ans=1;q=q%mo; for(;w;w>>=1,q=q*q%mo)if(w&1)ans=ans*q%mo; return ans;}LL C(int m,int n){return jc[m]*jcn[n]%mo*jcn[m-n]%mo;}int main(){ freopen("!.in","r",stdin);// freopen(".out","w",stdout); int q,Alls=0; read(n),read(m); jc[0]=1;fo(i,1,m+1)jc[i]=jc[i-1]*(LL)i%mo; jcn[m+1]=ksm(jc[m+1],mo-2);fod(i,m,0)jcn[i]=jcn[i+1]*(i+1LL)%mo; fo(i,1,n)Alls+=(a[i]=read(q)-1); sort(a+1,a+1+n); fo(i,1,n/2)swap(a[i],a[n-i+1]); if(n==1){printf("%d\n",m);return 0;} if(n==2){m-=a[1];printf("%d\n",m*(m-1)%mo);return 0;} f[1][0][a[1]*2][0]=1; f[1][0][a[1]][1]=2; fo(i,1,n-1) { fo(j,0,n+2) { fo(k,0,Alls*2) { fo(l,0,2)if(f[i][j][k][l]) { f[i+1][j+1][k+a[i+1]*2][l]=((LL)f[i+1][j+1][k+a[i+1]*2][l]+(LL)f[i][j][k][l]*(LL)(j+2LL-l))%mo; f[i+1][j][k+a[i+1]][l]=((LL)f[i+1][j][k+a[i+1]][l]+(LL)f[i][j][k][l]*(LL)(j*2+2LL-l))%mo; if(j)f[i+1][j-1][k][l]=((LL)f[i+1][j-1][k][l]+(LL)f[i][j][k][l]*(LL)(j))%mo; if(l<2) { f[i+1][j+1][k+a[i+1]][l+1]=((LL)f[i+1][j+1][k+a[i+1]][l+1]+(LL)f[i][j][k][l]*(2LL-l))%mo; f[i+1][j][k][l+1]=((LL)f[i+1][j][k][l+1]+(LL)f[i][j][k][l]*(2LL-l))%mo; } } } } } fo(i,0,min(m,Alls*2))ans=(ans+(LL)f[n][0][i][2]*C(m-i,n))%mo; printf("%lld\n",ans); return 0;}
阅读全文
0 0
- 【JZOJ 4345】【WC2016模拟】Fountain
- 【WC2016模拟】打击目标
- CTSC2008totem 【WC2016模拟】Picture
- 【WC2016模拟】几何
- 【WC2016模拟】最假女选手
- JZOJ NOIP2014模拟 8.12
- JZOJ NOIP2014模拟 8.13
- JZOJ 3432. 【GDOI2014模拟】服务器
- jzoj 1570. 【普及模拟】射击
- jzoj 1571. 【普及模拟】过河
- jzoj 1579. 【普及模拟】老鼠
- jzoj 1589. 【普及模拟】洗牌
- jzoj 1591. 【普及模拟】游戏
- JZOJ 4944 【WC模拟】Monument
- jzoj P1508【普及模拟】蚂蚁
- jzoj P1507【普及模拟】数列
- jzoj P1510【普及模拟】剪草
- 【普及模拟】数列 (jzoj)
- 懒人改造别人的工具eternalblue
- 【操作系统】多线程和多进程的管理
- 年度总结
- HTTP联机接口测试的交易录放-录
- 关于Java的String字符串常量的长度问题
- 【JZOJ 4345】【WC2016模拟】Fountain
- [转载]省选学习算法(补坑记录)
- 从 webpack 到全面拥抱 Parcel #1 探索 Parcel
- CGlib动态代理复习
- C++内存错误检测工具
- 椭圆检测及提取
- openvc之亮度与对比度处理
- 分治排序算法
- linux 常用命令大全