D - Maximum Value Problem FZU - 2037

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D - Maximum Value Problem FZU - 2037相关的知识,希望对你有一定的参考价值。

D - Maximum Value Problem FZU - 2037

题意;

这个序列[1,3,2,4],maxx=0.如果将maxx赋值为最大值需要3次,第一次为maxx=1,第二次maxx=3,第三次maxx=4
给你一个n,求n全排列的查找次数之和,以及次数/全排列数量

题解:

推公式,,,我也不知道怎么推的
貌似打表可以得到:
f[n]表示n的全排列的查找次数之和
f(n) = f(n - 1) * n + (n - 1)!
p[n]=f[n]/n! = p[n-1]+1/n

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\\n",a,b)
typedef long long ll;
using namespace std;

inline int read(){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);
   return s*w;
}
const int maxn=1e6+9;
const int mod=1e9+7;
int f[maxn];
double p[maxn];
void init(){
	f[1]=1;
	f[2]=3;
	p[2]=1.5;
	ll cal=2;
	for(int i=3;i<=1e6+2;i++)
	{
		f[i]=(f[i-1]*i+cal)%mod;
		p[i]=p[i-1]+1.0/i; 
		cal*=i;
	}
}
int main()
{
	int t;
	init(); 
	cin>>t;
	int cas=0;
	while(t--)
	{
		int n;
		cin>>n;

		printf("Case %d: %lld %.6lf\\n", ++cas, f[n], p[n]);
	}
}

以上是关于D - Maximum Value Problem FZU - 2037的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round 108(Problem - D Maximum Sum of Products)

Codeforces Round #648 (Div. 2) E. Maximum Subsequence Value(鸽巢原理)

646. Maximum Length of Pair Chain

[树形dp][换根]Maximum White Subtree

CodeForces 762D Maximum path

[LeetCode&Python] Problem 628. Maximum Product of Three Numbers