zoukankan      html  css  js  c++  java
  • 解题报告 Valentine‘s seat

     

    1.        题目

    1Valentine’s Seat(seat)

    描述

    今天是情人节的前一天,小杉还在电影院打工(惨啊)。

    老板很懂得情人节的情调,要小杉提前做好准备,那么现在给小杉的任务是对电影院的座椅上色。

    电影院总共n+1m+1列的椅子排成一个矩阵。第一行的椅子已经全部上了粉红色,第一列从第二个开始的椅子已经全部上了天蓝色。

    一个可爱的上色方案应该满足除了第一行第一列以外,对任意的一个椅子,它的颜色应当和它左边的一把椅子(同行)或上面的一把椅子(同列)颜色相同。

    小杉现在想知道总共有多少种可爱的上色方案。

    输入格式

    一行两个整数n,m(1<=n,m<=3000)

    输出格式

    仅有一行,一个整数,为上色方案数对19900801取模的结果

    样例输入

    1 1

    样例输出

    2

    样例解释

    唯一可上色的一把椅子,不是粉红就是天蓝,怎样都是可爱的

     

    2.        题目实质

    求一种特殊的 01 矩阵。

    3.        算法

    递推,其实这也是一个数学题。

    抽象出模型,就是01矩阵的问题,问题即为求最上一行全是1,最左一列全是001矩阵,任意一个元素与其前趋或上继相同的情况数。而这种情况等价于任意一行的0的个数大于等于上一行的0的个数(假如比上一行少的话,上一行多出的0的下继为1,这个1不满足题意)。

    接下来就很简单了,我们令f[n,k]为第n+1行有k+10的情况,则

    f[n,k]=sum{f[n-1,j]}(j=1..k)

    简单变换得

    f[n,k]=f[n-1,k]+f[n,k-1]

    初始状态为f[0,0]=1,结果为f[n,m] (f[n,m]=sum{f[n-1,j]}(j=1..m))

    空间限制的问题,使用滚动数组可以解决。

    其实仔细观察的话,会发现结果就是C(n+m,n)

    注意 n=0 ( 0 ) ,或是 k=0 (这一行这有最边上那一个零) f=1

     

    4.        注意事项

    话说这个题我的式子推对了,初始化打错了 XD

    所以,注意初始化啊啊。

    5.        时空复杂度

    O(n,m)

    6.        程序代码

    LZYstd  pascal

    const

     k=19900801;

    var

     a:array[0..3000,0..3000]of longint;

     n,m:longint;

     i,j:longint;

     

    begin

    assign(input,'seat.in');reset(input);

    assign(output,'seat.out');rewrite(output);

    readln(n,m);

    for i:=1 to n do a[i,0]:=1;

    for i:=1 to m do a[0,i]:=1;   //此处第一行为第 0

     

    for i:=1 to n do begin

     for j:=1 to m do begin

      a[i,j]:=(a[i-1,j]+a[i,j-1])mod k;

     end;

    end;

     

    if(a[n,m]<0)then writeln(a[n,m]+k) else writeln(a[n,m]);  //防止 mod 过头

    close(input);

    close(output);

    end.

  • 相关阅读:
    leetcode 18 4Sum
    leetcode 71 Simplify Path
    leetcode 10 Regular Expression Matching
    leetcode 30 Substring with Concatenation of All Words
    leetcode 355 Design Twitte
    leetcode LRU Cache
    leetcode 3Sum
    leetcode Letter Combinations of a Phone Number
    leetcode Remove Nth Node From End of List
    leetcode Valid Parentheses
  • 原文地址:https://www.cnblogs.com/SueMiller/p/2132317.html
Copyright © 2011-2022 走看看