当前位置: 首页 > 工具软件 > Critical Mass > 使用案例 >

UVa 580 Critical Mass

孔志强
2023-12-01
During the early stages of the Manhattan Project, the dangers of the new radioctive materials were
not widely known. Vast new factory cities were built to manufacture uranium and plu- tonium in bulk.
Compounds and solutions of these substances were accumulating in metal barrels, glass bottles and
cardboard box piles on the cement floors of store rooms. Workers did not know that the substances they
were handling could result in sickness, or worse, an explosion. The officials who new the danger assumed
that they could ensure safety by never assembling any amount close to the critical mass estimated by
the physicists. But mistakes were made. The workers, ignorant of the the dangers, often did not track
these materials carefully, and in some cases, too much material was stored together — an accident was
waiting to happen.
Fortunately, the dangers were taken seriously by a few knowledgeable physicists. They drew up
guidelines for how to store the materials to eliminate the danger of critical mass accumulations. The
system for handling uranium was simple. Each uranium cube was marked “U”. It was to be stacked
with lead cubes (marked “L”) interspersed. No more than two uranium cubes could be next to each
other on a stack. With this simple system, a potential for the uranium reaching critical mass (three
stacked next to each other) was avoided. The second constraint is that no more than thirty cubes can
be stacked on top of each other, since the height of the storage room can only accommodate that many.
One of the physicists was still not completely satisfied with this solution. He felt that a worker, not
paying attention or not trained with the new system, could easily cause a chain reaction. He posed
the question: consider a worker stacking the radioactive cubes and non radioactive cubes at random
on top of each other to a height of n cubes; how many possible combinations are there for a disaster to
happen?
For example, say the stack is of size 3. There is one way for the stack to reach critical mass — if
all three cubes are radioactive.
1: UUU
However, if the size of the stack is 4, then there are three ways:
1: UUUL
2: LUUU
3: UUUU
Input
The input is a list of integers on separate lines. Each integer corresponds to the size of the stack and
is always greater than 0. The input is terminated with a integer value of ‘0’.
Output
For each stack, compute the total number of dangerous combinations where each cube position in the
linear stack can either be “L” for lead, or “U” for uranium. Output your answer as a single integer on
a line by itself.
Sample Input
4
5
0
Sample Output
3

8

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(神奇的)动态规划~

f[i][j],i=1,2,3,4,分别表示结尾为LL,UL,LU,UU,长度为j的串种类数,则结果为2^i-f[1][i]-f[2][i]-f[3][i]-f[4][i],直接预处理出来即可,注意n==1,2,3时要直接赋值~


#include<cstdio>

int n,tot,f[5][31],ans[31],mi[31]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824};

void findd()
{
	ans[1]=ans[2]=0;ans[3]=1;
	for(int i=1;i<=4;i++) f[i][2]=1;
	for(int i=3;i<=30;i++)
	{
		f[1][i]=f[1][i-1]+f[2][i-1];
		f[2][i]=f[3][i-1]+f[4][i-1];
		f[3][i]=f[1][i-1]+f[2][i-1];
		f[4][i]=f[3][i-1];
	}
	for(int i=4;i<=30;i++) ans[i]=mi[i]-f[1][i]-f[2][i]-f[3][i]-f[4][i];
}

int main()
{
	findd();
	while(scanf("%d",&n)==1 && n) printf("%d\n",ans[n]);
	return 0;
}


 类似资料:

相关阅读

相关文章

相关问答