UVA 12034:Race (动态规划)
2017-08-03 20:40
316 查看
Race
Time limit:1000 ms OS:Linux点击查看题目内容
题意:
现在有n匹马,要求安排出场顺序,可以有多匹马同时出场,问一共有多少种方式。解题思路:
设一共i匹马时,出场次序数量为 j 时的出场方式为 a[i][j] 1匹马的情况:a[1][1]=1 没啥好说的 2匹马的情况:a[2][1]=1 , 对于a[2][2] 只能在a[1][1]的基础上把第二匹马放到前面或后面, 所以a[2][2]=a[1][1]*2=2 3匹马的情况:a[3][1]=1 , 对于 a[3][2],就可以在a[2][1]的基础上前后加一条,也可在a[2][2]的基础上任选和其中一匹马同时跑,由此 a[3][2]=a[2][1]*2+a[2][2]*2
图虽然画的比较难看。。还是看图吧
总之由上面的规律就能得出状态转移方程
dp[i][j]=dp[i−1][j−1]∗j+dp[i−1][j]∗j
Code:
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; const int maxn=1005; const int mod=10056; int dp[maxn][maxn]; int main() { mem(dp,0); for(int i=1;i<=1000;i++) { for(int j=1;j<=i;j++) { if(j==1) dp[i][j]=1; else dp[i][j]=(dp[i-1][j-1]*j+dp[i-1][j]*j)%mod; } } int T; cin>>T; for(int ca=1;ca<=T;ca++) { int n; cin>>n; int sum=0; for(int i=1;i<=n;i++) sum=(sum+dp [i])%mod; cout<<"Case "<<ca<<": "<<sum<<endl; } return 0; }
相关文章推荐
- UVA 12034 Race 动态规划+递推
- Race - UVa 12034 递推
- UVA 12034 Race
- uva 12034 Race递推
- UVA 12034 Race
- UVa 12034 - Race
- UVA - 12034 Race
- UVA 12034 Race
- UVA 12034(p332)----Race
- UVA 12034 Race
- UVA 12034 Race
- uva 12034 Race(递推+组合数)
- UVA 12034 Race(递推)
- uva 12034 Race
- UVa 12034 - Race(组合+递推)
- uva 12034 Race
- UVA 12034 Race
- UVa12034 Race 递推
- UVA 12034 Race 赛马名次
- UVA 12034 - Race(递推)