回 帖 发 新 帖 刷新版面

主题:TJU1039核电站问题??

想了很久不知道怎么做,希望有人可以指点一下。
网址:http://acm.tongji.edu.cn/people/ps/showproblem.php?problem_id=1039

问题是这样的:
Problem
一个核电站有N个放核物质的坑,坑排列在一条直线上。

如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。

  任务:对于给定的N和M,求不发生爆炸的放置核物质的方案总数

Input
该题有多组测试数据,每组数据一行,两个正整数N,M( 1<N≤50,2≤M≤5)

Output
每组数据只输出一个正整数S,表示方案总数。

Sample Input
4 3

Sample Output
13

回复列表 (共4个回复)

沙发

其实这道题有公式的……

手头没有程序,从别人那里捞来一个:
program tju1039;
const
  maxn=50;
var
  ans:array[0..maxn,2..5]of qword;
  n,m:byte;
begin
  for m:=2 to 5 do begin
    ans[0,m]:=1;
    for n:=1 to m-1 do
      ans[n,m]:=ans[n-1,m]*2;
    ans[m,m]:=ans[m-1,m]*2-1;
    for n:=m+1 to maxn do
      ans[n,m]:=ans[n-1,m]*2-ans[n-m-1,m];
  end;
  repeat
    read(n,m);
    writeln(ans[n,m]);
  until seekeof;
end.

板凳

f[i]表示前i个坑不爆炸的方案总数
在第i个坑只可能有2种情况:放核物质和不放核物质
所以,f[i]=f[i-1]*2-爆炸的个数

首先,由f的定义可以知道,第i-1位没有产生爆炸
又由于我们在第i位放入核物质后发生爆炸,说明正好有m个连续核物质
所以,从第i-m+1位到第i位正好全放了核物质(m个),同时i-m位必定没有放核物质
所以,可以知道爆炸的方案数为f[i-m-1]
所以:
  f[i]=2*f[i-1]-f[i-m-1]
这显然是O(n)的
需要做的只有处理初值问题.

3 楼

第二个方法挺不错的,用到了归纳法

4 楼

都是排列组合的问题啦,用点数学技巧好不好,这相当于n个大于M的数和为N

我来回复

您尚未登录,请登录后再回复。点此登录或注册