HDU 2047 阿牛的EOF牛肉串
2013-05-12 10:16
330 查看
解题报告:
题目大意:现有E、O、F三个字符,给出一个n,n表示有n个位置,这个n个位置都要摆放这三个字符里面的其中的一个字符,摆放的要求是任意两个相邻的位置不能同时出现两个
O,问一共有多少种摆法。
此题一看就是一道典型的DP题,假设现在给定了一个n,要求n个位置有多少种摆法则可以通过n-1和n-2来得到,具体的方法是先定义的数组DP[45],还是先给出递推公式吧,
DP
=DP[n-1]*2+DP[n-2]*2,这里分为两个部分,第一个部分表示若第n个位置只放E和F这两种情况的时候,可以直接用n-1个位置的摆放方法直接乘以二便得到当n位置只放E和F的情况数,接下来就要加上当n位置放O时的情况种数,当n位置放O时,显然n-1位置就不能放O了,这时只要用n-1位置不放O情况同样乘以二就可以得到n位置放O的情况数目。同理n-1位置不放O情况也可以有n-2位置乘以n-1位置只放E和F的情况递推过来,于是就加上DP[n-2]*2,最终便得到n位置的情况,要注意的是不许先将DP[1]和DP[2]位置进行初始化,初始化的值为DP[1]=3,DP[2]=8。
View Code
题目大意:现有E、O、F三个字符,给出一个n,n表示有n个位置,这个n个位置都要摆放这三个字符里面的其中的一个字符,摆放的要求是任意两个相邻的位置不能同时出现两个
O,问一共有多少种摆法。
此题一看就是一道典型的DP题,假设现在给定了一个n,要求n个位置有多少种摆法则可以通过n-1和n-2来得到,具体的方法是先定义的数组DP[45],还是先给出递推公式吧,
DP
=DP[n-1]*2+DP[n-2]*2,这里分为两个部分,第一个部分表示若第n个位置只放E和F这两种情况的时候,可以直接用n-1个位置的摆放方法直接乘以二便得到当n位置只放E和F的情况数,接下来就要加上当n位置放O时的情况种数,当n位置放O时,显然n-1位置就不能放O了,这时只要用n-1位置不放O情况同样乘以二就可以得到n位置放O的情况数目。同理n-1位置不放O情况也可以有n-2位置乘以n-1位置只放E和F的情况递推过来,于是就加上DP[n-2]*2,最终便得到n位置的情况,要注意的是不许先将DP[1]和DP[2]位置进行初始化,初始化的值为DP[1]=3,DP[2]=8。
View Code
#include<stdio.h> __int64 DP[45]; int n; void dabiao() { DP[1]=3; DP[2]=8; for(int i=3;i<=41;++i) DP[i]=2*DP[i-1]+2*DP[i-2]; } int main() { dabiao(); while(scanf("%d",&n)!=EOF) printf("%I64d\n",DP ); return 0; }
相关文章推荐
- hdu 2047 阿牛的EOF牛肉串(递推)
- HDU 2047 阿牛的EOF牛肉串
- hdu-2047-阿牛的EOF牛肉串
- HDU 2047 阿牛的EOF牛肉串
- HDU 2047 阿牛的EOF牛肉串
- HDU 2047 阿牛的EOF牛肉串
- hdu 2047 阿牛的EOF牛肉串(递推,dp)
- HDU 2047 阿牛的EOF牛肉串
- HDU 2047 阿牛的EOF牛肉串
- HDU 2047 阿牛的EOF牛肉串 (递推)
- HDU——2047——阿牛的EOF牛肉串
- hdu 2047 阿牛的EOF牛肉串
- HDU 2047 阿牛的EOF牛肉串
- HDU 2047 阿牛的EOF牛肉串(DP+错排)
- hdu 2047 阿牛的EOF牛肉串
- hdu-2047-阿牛的EOF牛肉串
- HDU 2047 阿牛的EOF牛肉串
- HDU 2047 - 阿牛的EOF牛肉串(递推)
- hdu 2047 阿牛的EOF牛肉串(递推)
- HDU - 2047 阿牛的EOF牛肉串 - 递推