• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
KのMidGard
人是人的一场雨,你终将独自前行。
博客园    首页    新随笔    联系   管理    订阅  订阅

[CodeWaySky 1008]诸侯安置

题目大意:在N阶十字中放K个“车”,互不干扰的方案总数。输出MOD 504的结果,镜面和旋转算作不同方案。

题目大意:在N阶十字中放K个“车”,互不干扰的方案总数。输出MOD 504的结果,镜面和旋转算作不同方案。(十字图见下)一个三阶十字图

题目链接:http://codewaysky.sinaapp.com/problem.php?id=1008

 

题解-来自NOI导刊:

类似打砖块的巧妙DP,将图形倒腾倒腾

然后就随便搞了

#include<cstdio>
#define min(a,b) a<b?a:b
int n,m,lim,i,j,k,dp[202][10001]={0},num[202];
int main(){
freopen("empire.in","r",stdin);
freopen("empire.out","w",stdout);
scanf("%d%d",&n,&m);
if(m==0){
printf("1\n");
return 0;
}
lim=n<<1;
for(i=j=1;i<lim;i+=2){
dp[i][0]=dp[i+1][0]=1;
num[i+1]=num[i]=i;
}
dp[1][1]=dp[2][1]=1;
for(i=3;i<lim;i++){
dp[i][1]=num[i];
for(j=min(num[i],m);j>1;j--){
for(k=j-1;k<i;k++){
dp[i][j]+=dp[k][j-1]*(num[i]-(j-1));
dp[i][j]%=504;
}
}
}
j=0;
for(i=m;i<lim;i++) j+=dp[i][m];
j%=504;
printf("%d\n",j);
return 0;
}



posted @ 2011-11-13 18:14  风行狩  阅读(351)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3