首页 > 代码库 > UVa 1638 Pole Arrangement
UVa 1638 Pole Arrangement
递推。
设f[柱子数量][从左边能看到的数量][从右边能看到的数量]=方案数
假设2~i高度的柱子都已经安排好,现在要插入高度为1的柱子。若它放在最左边,左边可见数量+1,放在最右边,右边可见数量+1,放在中间(有i-2个可能位置),左右可见数量不变。
递推完一个高度i时,假设把所有在场的柱子都拔高1单位高度,此时方案数不变,再加一个高度为1的柱子进去……
1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 #define LL long long 8 using namespace std; 9 const int mxn=30;10 LL f[mxn][mxn][mxn];11 void init(){12 int i,j,k;//有i个方块,从左边看能看到j个,从右边看能看到k个13 f[1][1][1]=1;14 for(i=1;i<=20;i++){15 for(j=1;j<=20;j++){16 for(k=1;k<=20;k++){17 f[i][j][k]+=f[i-1][j][k]*(i-2)+f[i-1][j-1][k]+f[i-1][j][k-1];18 }19 }20 }21 }22 int n,l,r;23 int main(){24 init();25 int T;26 scanf("%d",&T);27 while(T--){28 scanf("%d%d%d",&n,&l,&r);29 printf("%lld\n",f[n][l][r]);30 }31 return 0;32 }
UVa 1638 Pole Arrangement
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。