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 }
时间: 2024-10-03 15:48:11

UVa 1638 Pole Arrangement的相关文章

Uva 1638 Pole Arrangement DP

倒过来从插入最短的木棒考虑 1638 Pole ArrangementThere are poles of height 1, 2, . . . , n in a row. If you look at these poles from the left side or the rightside, smaller poles are hidden by taller poles. For example, consider the two arrangements of 4 poles int

UVa 1638 Pole Arrangement (递推或DP)

题意:有高为1,2,3...n的杆子各一根排成一行,从左边能看到L根,从右边能看到R根,求杆子的排列有多少种可能. 析:设d(i, j, k)表示高度为1-i的杆子排成一行,从左边看到j根,从右边看到k根的数目.当i>1时,我们按照从大到小的顺序按排杆子, 假设已经安排完i-1根了,那么还剩下一根就是高度为1的了,那么它放在哪都不会挡住任何一根杆子.情况有3种: 1.放在左边,那么在左边一定能够看到它,在右边看不到(因为i>1): 2.放在右边,那么在右边一定能够看到它,在左边看不到(因为i&

UVa 1638 Pole Arrangement【递推】

题意:给出n根高度为1,2,3,---n的杆子,从左边能看到l根,右边能够看到r根,问有多少种可能 看的紫书的思路 先假设已经安排好了高度为2---i的杆子, 那么高度为1的杆子的放置方法有三种情况 放在最左边:从左边看得见,右边看不见 放在最右边:从右边看得见,左边看不见 放在中间,有i-2个空位可以插,左右都看不见 所以可以写出递推关系: d[i][j][k]=d[i-1][j-1][k]+d[i-1][j][k-1]+d[i-1][j][k]*(i-2); 1 #include<iostr

UVa 1638 (递推) Pole Arrangement

很遗憾,这么好的一道题,自己没想出来,也许太心急了吧. 题意: 有长度为1.2.3...n的n个杆子排成一行.问从左到右看能看到l个杆子,从右往左看能看到r个杆子,有多少种排列方法. 分析: 设状态d(i, j, k)表示i(i≥2)个长度各不相同的杆子,从左往右看能看到j个杆子,从右往左看能看到k个杆子的排列方法.现在假设除了最短的那个杆子,其他i-1个杆子的位置都已排好.那么考虑最短的杆子的位置,有三种决策: 将最短的放到最左边,这样左视图中看到的杆子数加一,右视图不变. 将最短的放到最右边

第10章例题(紫书)

21/21 题目都很基础,有很多题书上讲得比较详细,然后隔得时间有点久,所以具体什么trick都忘了,思路也懒得去回忆,所以将就着放上来了.... 例题10–1 Uva 11582 题意:输入a, b, n让你计算F[a^b]%n;其中这个F[i]是斐波那契数: 题解: 这题是快速幂+找循环节,用什么方法找循环节呢?因为第一个数是0和1,然后当再出现0和1的时候就是出现循环节的时候,然后假如找到了循环节T,然后就有F[n] = F[n % T],预处理找循环节,O(一百万左右),快速幂logn

UVa1638数学递推

题意不说,直接上思路: 这道题看起来没有思路,不清楚如何安排能够保证左边l根,右边r根,所以需要简化这道题,让思路浮现出来, 我们摆放顺序不能是从左到右或者从右到左的顺序摆放,而从小到大不行,所以是从大到小可以,原因是摆放小的不会影响大的, 将小的摆放左边一定能够使左边+1,同理右边也是一样,而中间则不能对左右造成影响,而从小到大的顺序会对左右产生影响, 并且不能够很清楚的知道影响了多少(想一想,为什么). 所以根据上面定义了状态d(i,j,k)表示从大到小前i个,左边为j,右边为k的方案数,不

Uva 110 - Meta-Loopless Sorts(!循环,回溯!)

题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=46  Meta-Loopless Sorts  Background Sorting holds an important place in computer science. Analyzing and implementing various so

uva 10651 Pebble Solitaire (BFS)

uva 10651 Pebble Solitaire Pebble solitaire is an interesting game. This is a game where you are given a board with an arrangement of small cavities, initially all but one occupied by a pebble each. The aim of the game is to remove as many pebbles as

【UVa 10881】Piotr&#39;s Ants

Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: there is no stopping them;the ants will soon be here. And I, for one, welcome our new insect overlords."Kent Brockman Piotr likes playing with ants. H