定義dp[
i]
dp[i]
dp[i
]為能量為i
ii時可行的方案數
那麼顯然dp[
0]=n
!dp[0]=n!
dp[0]=
n! dp[
i]=(
a[i−
1]−i
+1)/
(n−i
+1
)dp[i]=(a[i-1]-i+1)/(n-i+1)
dp[i]=
(a[i
−1]−
i+1)
/(n−
i+1)
其中i−
1i-1
i−1是已經殺死的敵人個數
a [i
−1
]a[i-1]
a[i−1]
表示怪物的字首和,也就是能殺死的怪物總數
#include using namespace std;
#define int long long
const int mod=1e9+7;
const int maxn=2e5+10;
int n,m,dp[maxn],a[maxn];
int quick_pow(int x,int n)
return ans;
}int inv(int x)
signed main()
int fac=1;
for(int i=1;i<=n;i++) fac*=i,fac%=mod;
for(int i=1;i<=n;i++) a[i]+=a[i-1];
dp[0]=fac;
for(int i=1;i<=n;i++)
dp[i]=dp[i-1]*(a[i-1]-i+1)%mod*inv(n-i+1)%mod;
//有a[i-1]-(i-1)個怪物可以打
int ans=0;
for(int i=0;i<=n;i++)
cout << ans;
}