bzoj3157 3516

太神了,被数学题虐了

orz http://m.blog.csdn.net/blog/skywalkert/43970331

这道题关键是抓住m较小的特点,构造递推解决

 1 const mo=1000000007;
 2
 3 var c:array[0..1010,0..1010] of longint;
 4     f:array[0..1010] of int64;
 5     i,j,n,m:longint;
 6     t,ch:int64;
 7
 8 function quick(x:int64;y:longint):int64;
 9   begin
10     quick:=1;
11     while y>0 do
12     begin
13       if y mod 2=1 then quick:=quick*x mod mo;
14       y:=y div 2;
15       x:=x*x mod mo;
16     end;
17   end;
18
19 begin
20   readln(n,m);
21   c[0,0]:=1;
22   for i:=1 to m do
23   begin
24     c[i,0]:=1;
25     for j:=1 to i do
26       c[i,j]:=(c[i-1,j]+c[i-1,j-1]) mod mo;
27   end;
28   if m=1 then
29     writeln(int64(n)*int64(n+1) div 2 mod mo)
30   else begin
31     ch:=quick(m-1,mo-2);
32     f[0]:=int64(m)*(quick(m,n)-1+mo) mod mo*ch mod mo;
33     for i:=1 to m do
34     begin
35       f[i]:=quick(n,i)*quick(m,n+1) mod mo;
36       for j:=0 to i-1 do
37       begin
38         t:=int64(c[i,j])*f[j] mod mo;
39         if (i-j)  mod 2=1 then f[i]:=(f[i]-t+mo) mod mo
40         else f[i]:=(f[i]+t) mod mo;
41       end;
42       f[i]:=f[i]*ch mod mo
43     end;
44     writeln(f[m]);
45   end;
46 end.

时间: 2024-10-05 13:53:27

bzoj3157 3516的相关文章

【bzoj3157/3516/4126】国王奇遇记

求\(\displaystyle{\sum_{i=1}^n m^ii^m}(x\le 10^5,n\le10^9)\) 首先转为有更一般的形式\(\displaystyle{\sum_{i=1}^nm^if(i)}\)其中\(f(i)\)是\(x\)次多项式 \(\displaystyle{\sum m^xf(x)\delta x=g(x)m^x(+C)}\) 可得\(\displaystyle{\Delta g(x)m^x=f(x)m^x}\) 有\(g(x+1)=\frac{g(x)+f(x

BZOJ3157: 国王奇遇记 & 3516: 国王奇遇记加强版

令 Si=∑k=1nkimk 我们有 (m?1)Si======mSi?Si∑k=1nkimk+1?∑k=1nkimk∑k=2n+1(k?1)imk?∑k=1nkimknimn+1+∑k=1nmk((k?1)i?ki)nimn+1+∑k=1n(∑j=1i?1(?1)i?j(ij)kjmk)nimn+1+∑j=0i?1(?1)i?j(ij)Sj 直接按照这条式子O(n2) 递推即可. #include <iostream> #include <cstdio> #include <

bzoj 3157 &amp;&amp; bzoj 3516 国王奇遇记——推式子

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.php?id=3516 题解:http://blog.miskcoo.com/2014/06/bzoj-3157 没管 O(m) 的方法-- 注意特判 m==1 的时候.因为那个式子不支持 m==1 . #include<cstdio> #include<cstring> #includ

bzoj 3157 &amp; bzoj 3516 国王奇遇记 —— 推式子

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.php?id=3516 这篇博客写得太好:http://blog.miskcoo.com/2014/06/bzoj-3157 然而目前之会 \( O(m) \) 的做法: 感觉关键是设计 \( S_{i} \),把它设在 \( m \) 那一维上很妙,毕竟 \( i^{m} \) 不太好做: 然而推式

uva live 3516 Exploring Pyramids 区间DP

// uva live 3516 Exploring Pyramids 区间DP // // 题目大意: // // 给你一个多叉树,每个节点是一个大写字母,从根节点走,按照先序遍历的 // 原则访问,不能访问则回溯,每次记录一下节点的字符,最后得到一个字符串.现 // 在给你一个字符串,问可能符合条件的多叉树的数量. // // 解题思路: // // 区间DP,我们注意到,从根节点出发,一定会再次回到根节点,那么我们可以设 // d(i,j) 是序列i到j段形成的符合条件的多叉树的数量,则

【BZOJ】【3157】&amp;【BZOJ】【3516】国王奇遇记

数论 题解:http://www.cnblogs.com/zhuohan123/p/3726933.html copy一下推导过程: 令$$S_i=\sum_{k=1}^{n}k^im^k$$ 我们有$$ \begin{aligned} (m-1)S_i &= mS_i-S_i \\&=\sum_{k=1}^n k^im^{k+1}-\sum_{k=1}^n k^i m^k \\&=\sum_{k=2}^{n+1}(k-1)^i m^k-\sum_{k=1}^n k^i m^k \

HDOJ 3516 Tree Construction 四边形优化dp

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3516 题意: 大概就是给你个下凸包的左侧,然后让你用平行于坐标轴的线段构造一棵树,并且这棵树的总曼哈顿距离最短 题解: 很容易得到转移方程: $$dp[i][j]=min \{ dp[i][k-1]+dp[k][j] + dis(uni(i,k-1),uni(k,j))\}$$ 其中$dp[i][j]$表示从$i$到$j$的最优解,$dis(i,j)$表示$i$和$j$之间的曼哈顿距离,$uni(i

【HDOJ】【3516】Tree Construction

DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[k+1][j-(k-i+1)]+w(i,k,j)} (这个地方一开始写错了……) 即,将一棵树从k处断开成(i,k)和(k+1,i+j-1)两棵树,再加上将两棵树连起来的两条树枝的长度w(i,k,j) 其中,$ w(i,k,j)=x[k+1]-x[i]+y[k]-y[i+j-1] $ 那么根据四边形

【HDU】3516 Tree Construction

http://acm.hdu.edu.cn/showproblem.php?pid=3516 题意:平面n个点且满足xi<xj, yi>yj, i<j.xi,yi均为整数.求一棵树边只能向上和向右延展的经过所有点的最小长度.(n<=1000, 0<=xi, yi<=10000) #include <cstdio> using namespace std; const int N=1005, oo=~0u>>1; int d[N][N], x[N]