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
[LeetCode&Python] Problem 628. Maximum Product of Three Numbers