LightOJ1326 Race(DP)
2016-01-21 22:17
316 查看
题目问N匹马比赛有多少种结果。一开始想用排列组合搞搞,然后发现想错了。艰难地把思路转向DP,最后AC了。
dp[i][j]表示前i匹马确定出j个名次的方案数
dp[1][1]=1
对于第i匹马,它要确定出j个名次:要嘛前i-1匹确定出j个次名,然后第i匹可以成为第1...j名;要嘛前i-1匹确定出j-1个名次,然后第i匹成为独立的新的一个名次,也有第1..j名j种选择。
所以状态转移方程是:dp[i][j]=d[i-1][j]*j+d[i-1][j-1]*j
dp[i][j]表示前i匹马确定出j个名次的方案数
dp[1][1]=1
对于第i匹马,它要确定出j个名次:要嘛前i-1匹确定出j个次名,然后第i匹可以成为第1...j名;要嘛前i-1匹确定出j-1个名次,然后第i匹成为独立的新的一个名次,也有第1..j名j种选择。
所以状态转移方程是:dp[i][j]=d[i-1][j]*j+d[i-1][j-1]*j
#include<cstdio> #include<cstring> using namespace std; int d[1001][1001]; int main(){ d[1][1]=1; for(int i=2; i<1001; ++i){ for(int j=1; j<=i; ++j){ d[i][j]=d[i-1][j]*j+d[i-1][j-1]*j; d[i][j]%=10056; } } int t,n; scanf("%d",&t); for(int cse=1; cse<=t; ++cse){ scanf("%d",&n); int res=0; for(int i=1; i<=n; ++i){ res+=d [i]; res%=10056; } printf("Case %d: %d\n",cse,res); } return 0; }
相关文章推荐
- python随机数的产生
- String常用方法(2)
- Source Insight 配置和快捷键
- Android基础之使用Fragment控制切换多个页面
- 设置开机不自动进入锁屏状态
- Linux基础知识点
- Linux基础知识点
- ZJU1078-Palindrom Numbers
- ubuntu_socket通信_g++编译
- centos 7 systemd 与docker的冲突
- 蓝懿IOS学习核心动画和UIImagePicker
- ViewPager简单实用以及如何移除当前的Fragment
- bfs和dfs 模板
- Django + mysql
- iOS开发Block的使用
- 为什么需要bootloader
- 一入程序深似海
- String 类常用方法(1)
- android studio使用教程(八) 如何在project中删除module
- ubuntu 如何安装tomcat