【洛谷】P 1022-川を渡る卒

5129 ワード

【洛谷】P 1022-渡河卒タイトル記述盤上A点に渡河卒があり、目標B点まで歩く必要がある.卒走のルールは、下、または右に進むことができる.同時に盤上C点に相手の馬があり、その馬がいる点とすべてのジャンプが1歩で到達する点を対方馬の制御点と呼ぶ.そのため「馬が川卒を止める」と呼ぶ.盤は座標で表され、A点(0,0)、B点(n,m)(n,mは20を超えない整数)であり、同様に馬の位置座標が与えられる必要がある.今、卒がA点からB点に到達できる経路の数を計算するように要求されます.馬の位置が固定されていると仮定して、卒が一歩歩いて馬が一歩歩いているわけではありません.入出力フォーマット入力フォーマット:B点座標と馬の座標を表す1行4つのデータ.≪出力フォーマット|Output Format|ldap≫:すべてのパス・バー数を表すデータ.サンプル入力6 6 6 3サンプル出力6エッセンスアルゴリズム本題データの範囲が広く、うっかり配列アクセスの境界を越えるようなエラーが発生する可能性があります.本来、基準数を1つ加えると問題が回避され、オフセット量を計算する問題に関連します.簡単に言えば、1点のパスバーの数は左側の点と上の点から一歩歩いて着くことができます.このように分析すれば、テーマはずっと簡単になります.リファレンスコード
#include 
#include 
#include 
using namespace std;
long long a[22][22],f[22][22];
int main()
{
    long long n,m,i,j,x,y;
    cin>>n>>m>>x>>y;
    n=n+1;
    m=m+1;
    x=x+1;
    y=y+1;
    a[x][y]=-1;
    if(x-1>=1&&y-2>=1)
    a[x-1][y-2]=-1;
    if(x-2>=1&&y-1>=1)
    a[x-2][y-1]=-1;
    if(x-2>=1&&y+1>=1)
    a[x-2][y+1]=-1;
    if(x-1>=1&&y+2>=1)
    a[x-1][y+2]=-1;
    if(x+1>=1&&y+2>=1)
    a[x+1][y+2]=-1;
    if(x+2>=1&&y+1>=1)
    a[x+2][y+1]=-1;
    if(x+2>=1&&y-1>=1)
    a[x+2][y-1]=-1;
    if(x+1>=1&&y-2>=1)
    a[x+1][y-2]=-1;
    f[1][1]=1;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(i!=1||j!=1)
            {    
                if(a[i][j]!=-1)
                {
                    f[i][j]=f[i-1][j]+f[i][j-1];
                }
            }
        }
    }
    cout<return 0;
}

総括+反省この問題にとって,アクセス限界&計算経路の問題を解決できればACが可能である.自分が最初にテーマを手に入れて、书いたコードも爆0で、それから改善を経てACも.