hdu 1143 Tri Tiling (DP)
2012-10-22 13:17
295 查看
点击打开链接
转载:开始也是想递推的,但是发现递推的过程中有重复计算,所以便下结论此题不是递推,然后就不会做了。后来看了人家大牛的解法,发现确实是递推,而且避免重复计算的过程的公式为f
=f(2)*f[n-2]+2*(f[n-4]+f[n-2]+...+f[0])(其中f[0]约定为1)。公式是这样解释的:我们从右往左定顺序,首先是划分为n-2,和2两部分,则为f[n-2]*f[2],然后划分为n-4和4两部分,但是4的部分不能分解为2,2(否则重复计算了)。我尝试着画了下只有两种。然后划分为n-6和6两部分,但是6的部分不能分解为2,4或4,2或2,2,2。也只有两种,依次类推。变得公式了。AC代码如下:
转载:开始也是想递推的,但是发现递推的过程中有重复计算,所以便下结论此题不是递推,然后就不会做了。后来看了人家大牛的解法,发现确实是递推,而且避免重复计算的过程的公式为f
=f(2)*f[n-2]+2*(f[n-4]+f[n-2]+...+f[0])(其中f[0]约定为1)。公式是这样解释的:我们从右往左定顺序,首先是划分为n-2,和2两部分,则为f[n-2]*f[2],然后划分为n-4和4两部分,但是4的部分不能分解为2,2(否则重复计算了)。我尝试着画了下只有两种。然后划分为n-6和6两部分,但是6的部分不能分解为2,4或4,2或2,2,2。也只有两种,依次类推。变得公式了。AC代码如下:
#include"stdio.h" int main() { int i,j,n; int f[33]; f[0]=1;f[2]=3; for(i=4;i<=30;i++) { f[i]=f[2]*f[i-2]; j=i-4; while(j>=0) { f[i]+=2*f[j]; j-=2; } } while(scanf("%d",&n),n!=-1) { if(n%2==0) printf("%d\n",f ); else printf("0\n"); } return 0; }
相关文章推荐
- 【DP】HDU 1143 Tri Tiling
- 【DP】HDU 1143 Tri Tiling
- hdu 1143 Tri Tiling (DP)
- HDU 1143 Tri Tiling (状压DP)
- HDU 1143 Tri Tiling(dp)
- HDU 1143 Tri Tiling
- HDU 1143 Tri Tiling
- hdu-1143-Tri Tiling
- HDU 1143 Tri Tiling
- hdu 1143 Tri Tiling 递推
- HDU 1143 Tri Tiling
- HDU 1143 Tri Tiling
- hdu 1143 Tri Tiling
- hdu 1143 Tri Tiling
- hdu1143 Tri Tiling(数学:递推)
- HDU_1143_tri tiling
- HDU 1143 Tri Tiling (递推)
- HDU 1143 Tri Tiling (数学)
- HDU 1143 Tri Tiling (递推)
- HDU 1143 Tri Tiling 【递推】