zoukankan      html  css  js  c++  java
  • 车的放置

    题目描述

    有下面这样的一个网格棋盘,a,b,c,d表示了对应边长度,也就是对应格子数。

    当a=b=c=d=2时,对应下面这样一个棋盘

    要在这个棋盘上放K个相互不攻击的车,也就是这K个车没有两个车在同一行,也没有两个车在同一列,问有多少种方案。同样只需要输出答案mod 100003后的结果。

    输入输出格式

    输入格式:

    输入文件place.in的第1行为有5个非负整数a, b, c, d和k。

    输出格式:

    输出文件place.out包括1个正整数,为答案mod 100003后的结果。

    输入输出样例

    输入样例#1: 复制
    2 2 2 2 2
    输出样例#1: 复制
    38
    

    说明

    【数据规模与约定】

    对于部分数据,有b = 0;

    对于部分数据,有a,b,c,d≤4。

    对于100%的数据,a,b,c,d,k≤1000,且保证了至少有一种可行方案。

    把图形左右翻转

    令f[i][j]为前j列,放了i个车的方案,v[j]为第j列的高度

    f[i][j]=f[i][j-1]+f[i-1][j-1]*(v[j]-i+1)

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int Mod=100003;
     7 int a,b,c,d,k;
     8 long long f[1001][2001],v[2001];
     9 int main()
    10 {int i,j;
    11     cin>>a>>b>>c>>d>>k;
    12     for (i=1;i<=c;i++)
    13     v[i]=d,f[0][i]=1;
    14     for (i=c+1;i<=a+c;i++)
    15     v[i]=b+d,f[0][i]=1;
    16     f[0][0]=1;
    17     for (j=1;j<=a+c;j++)
    18     for (i=1;i<=k;i++)
    19     f[i][j]=(f[i][j-1]+f[i-1][j-1]*(v[j]-i+1))%Mod;
    20     cout<<f[k][a+c];
    21 }
  • 相关阅读:
    EXT性能优化(转载)
    xampp 下配置mail()函数发邮件
    从存储过程中返回结果 (转载)
    HDU1394 Minimum Inversion Number
    HDU4414 Finding crosses
    POJ1328 Radar Installation
    HDU3308 LCIS
    POJ2352 Stars
    POJ2513 Colored Sticks
    HDU4027 Can you answer these queries?
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7786737.html
Copyright © 2011-2022 走看看