【JZOJ4806】打工
2016-10-06 19:46
162 查看
Description
Solution
比赛的时候以为是n log n的,所以就没有去想n2,然后就花了好几个小时来推递推式,结果没有推出来。结果只让我拿了十分,去死吧,魔王大人。其实,正解就是n方的。
设f[i][j]表示做到第i个,然后前面最大的是j。
f[i][j]=f[i−1][j]∗j+f[i−1][j−1]
因为每个i有a[i]的限制,所以每次f[i][da]+=a[i]−1(da表示前i个最大的a[i]),没有初始化,因为要边做边限制。
Code
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define fo(i,a,b) for(i=a;i<=b;i++) #define fod(i,a,b) for(i=a;i>=b;i--) using namespace std; typedef long long ll; const int maxn=10007,mo=1000007; ll i,j,k,l,t,n,m,ans,da,u,v; ll a[maxn],fact[maxn],ni[maxn],sum; ll f[2][maxn]; int main(){ scanf("%lld",&n); fo(i,1,n)scanf("%lld",&a[i]); da=a[1]; fo(i,2,n){ u=v^1; fo(j,1,i){ f[u][j]=(f[v][j]*j+f[v][j-1])%mo; } f[u][da]=(f[u][da]+a[i]-1)%mo; da=max(da,a[i]); v=u; } fo(i,1,n){ ans=(ans+f[v][i])%mo; } printf("%lld",ans+1); }
相关文章推荐
- 【JZOJ4806】打工
- 我的打工经历
- [转载]品味在Siemens打工的日子
- 当老板和打工的区别
- 一个大学毕业生在浙江打工的悲哀
- 我的打工生活
- 为.NET程序员打工的站长——博客园dudu
- 齐唐创业日记:毕业七年从打工到创办网站(转)
- 人不能一辈子打工!
- 五年老销售,徘徊在打工与创业的路口(转载)
- 宁做创业狼,不做打工狗
- 我的成功可以复制--打工皇帝唐骏
- 转载--这些道理不懂,你注定就是穷打工的命
- 创业公司打工指南
- 10年打工总结了6句话
- 网络跟现实是一样的,有当苦力,有打工,有当老板
- 进化为一个商人,抛弃打工心态很重要
- 金钱无限可以使你不用再去打工赚钱
- 打工是最愚蠢的投资——李嘉诚在大梅沙的演讲
- 李嘉诚演讲:打工是最愚蠢的投资