hdu 2512 一卡通大冒险(第二类斯特林数)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 2512 一卡通大冒险(第二类斯特林数)相关的知识,希望对你有一定的参考价值。
递推思路如下,i张卡片分成j堆,那么分为两种情况:第i张卡片自成一堆或没有自成一堆。
那么自成一堆的话就是dp[i-1][j-1]种情况
不自成一堆的话就是就能在j堆种任意挑一堆放入,所以有dp[i-1][j]*j种情况
综上,如下:
dp[i][j]=dp[i-1][j]*j+dp[i-1][j-1]。
关于第二类斯特林数,百度就好。
具体代码
#include <iostream> using namespace std; int dp[2005][2005]; int main() { for(int i=1;i<=2000;i++) { dp[1][i]=0; dp[i][0]=dp[i][1]=1;//用dp[i][0]来储存i张卡存放的总可能数 } for(int i=2;i<=2000;i++) for(int j=2;j<=2000;j++) { dp[i][j]=dp[i-1][j]*j+dp[i-1][j-1]; dp[i][j]%=1000; if(dp[i][j]!=0) { dp[i][0]+=dp[i][j]; dp[i][0]%=1000; } } int n,t; cin>>t; while(t--) { cin>>n; cout<<dp[n][0]<<endl; } }
以上是关于hdu 2512 一卡通大冒险(第二类斯特林数)的主要内容,如果未能解决你的问题,请参考以下文章
HDU 4045 Machine scheduling (第二类斯特林数+DP)