诸侯安置DP做法
来源:互联网 发布:华硕风扇控制软件 编辑:程序博客网 时间:2024/04/27 15:18
这几天考试,在考试中有这样一道题叫“诸侯安置”没过,但事后改对了。
题目:
诸侯安置
【问题描述】
很久以前,有一个强大的帝国,它的国土成正方形状,如图1 所示
这个国家有若干诸侯。由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地
(正方形中的一格)。但是,这些诸侯又非常好战,当两个诸侯位于同一行或同一列时,他们
就会开战。如下图2 为n=3 时的国土,阴影部分表示诸侯所处的位置。前两幅图中的诸侯可
以互相攻击,第三幅则不可以。
国王自然不愿意看到他的诸侯们互相开战,致使国家动荡不安。因此,他希望通过
合理的安排诸侯所处的位置,使他们两两之同都不能攻击。
现在,给出正方形的边长n,以及需要封地的诸侯数量k,要求你求出所有可能的安置
方案数。(n≤100,k≤2n2-2n+1)
由于方案数可能很多,你只需要输出方案数除以504 的余数即可。
【输入】
仅一行,两个整数n 和k,中阍用一空格隔开。
【输出】
一个整数,表示方案数除以504 的余数。
【样例】
empire.in empire.out
2 2 4
本题我们先写DP做法,我们可以设置一个dp数组,让他的第一维来表示到第几列了,第二维表示能放几个诸侯。我们使列每次从左向右加一,由此得到每一列前最多能放多少个诸侯。而列的总数是n*2-1。在这要特别提醒大家,当i为奇数是最多有i种情况,可当i为偶数时却只有i-1种情况。
#include<iostream>#include<cstdio>using namespace std;int n,Empire,ans = 0;int territory[250][250],q[250];int p;void init(){scanf("%d%d",&n,&Empire);if(Empire==0) { printf("1\n");exit(0);} if(Empire>=2*n-1) { printf("0\n"); exit(0);} p = n*2-1;//最多能有多少列 for(int i = 1;i <= p; i++){if(i%2){territory[i][1] = i;//当i为奇数时在第i列只放一个的话,会有i种情况 }else{territory[i][1] = i-1;//当i为偶数时在第i列只放一个的话,只有i-1种情况 }}}void work(){for(int i = 1;i <= 2*n-1; i++){ for(int j = 2;j <= i; j++){for(int k = 1;k <= i-j+1; k++){territory[i][j] += territory[i-k][j-1]*(i-j+i%2);//把在第i列放j个的所有情况累加起来 (转移式方程) territory[i][j] %= 504; //每次mod504 }}}for(int i = Empire;i < 2*n-1; i++){territory[2*n-1][Empire] += territory[i][Empire];//把所有能放 Empire个的情况数累加起来得到答案 territory[2*n-1][Empire] %= 504;}}int main(){freopen("Empire.in","r",stdin);freopen("Empire.out","w",stdout);init();work();printf("%d",territory[2*n-1][Empire]);return 0;}
0 0
- 诸侯安置DP做法
- dp——洛谷P1240 诸侯安置
- 【洛谷 P1240】诸侯安置(Dp)
- coj 1504 放置棋子(诸侯安置)dp
- 洛谷 P1240 诸侯安置
- 诸侯安置(暴力搜索)
- 诸侯安置 搜索02 empire
- 洛谷P1240 诸侯安置 递推
- zoj 2744 DP做法
- 安置家园
- XOJ 1063 TSP的dp做法
- ZOJ 1025 Wooden Sticks【非DP做法】
- poj2411 Mondriaan's Dream 插头dp做法
- hdu 1058 朴素算法和DP做法
- poj1947 ----- 树形DP - 分组背包做法
- codeforces#363 C. Vacations dp做法
- 击鼓传花(赛码)(dp做法)
- codeforces 9C 数位DP做法
- C/C++ 文件读写操作总结
- Android Listview滑动及渐变动画
- 继承、实现、依赖、关联、聚合、组合的联系与区别
- java正则表达式
- 2016 Multi-University Training Contest3
- 诸侯安置DP做法
- Qt Quick ToolTip
- POJ 2996 简单模拟
- poj2299 Ultra-QuickSort
- HTML学习03-HTML标题/HTML段落
- hdu 5754 多校第3场
- 【Android】使用Jenkins+Gradle+FTP,实现自动打包,自动上传文件至FTP
- 隐藏TabBar的方法
- spring-boot+mybatis动态sql