UVA 1073 - Glenbow Museum(数论+计数问题+递推)
来源:互联网 发布:淘宝店铺怎么重新激活 编辑:程序博客网 时间:2024/05/16 11:15
题目链接:1073 - Glenbow Museum
白书上的例题,需要一定的推理。
首先要把问题转化,推理出n个点,R的个数为(n + 4) / 2, O的个数为(n - 4) / 2个,因为首先四个角必须为R,然后在中间添加O点,每有一个O点就要多一个R点,所以最后R点比O点多4。
然后问题就转化为给定n个R点和m个O点,求出有多少个序列,要求O点不连续,并且R的连续个数不能超过4,的序列个数。
可以设状态dp[i][j][2][2],表示用到第i个R点第j个O点,开头点,结尾点,的情况种数来进行状态转移。
然后白书上有一种更高效的方法,因为连续的R的个数不可能超过O的数个4个以上,所以当i - j > 5的值是对答案没影响的。
所以设状态为dp[i][j][2],表示i个R,已经有j对R(最多有4对R),开头点,末尾为R的状态,状态转移方程为
dp[i][j][k] = dp[i - 1][j][k] (末尾添加OR) + sum{dp[i - 1][j - 1][k]} (末尾添加R), k = 0 表示开头为R,k = 1表示开头为O。
ans[n] = dp[n][3][0] + dp[n][4][1] + dp[n][4][0](末尾还需补个O)。
代码:
#include <stdio.h>#include <string.h>const int N = 505;int n;long long ans[N * 2], dp[N][5][2];void DP() {for (int k = 0; k < 2; k++) {dp[1][0][k] = 1;for (int i = 2; i < N; i++) {for (int j = 0; j < 5; j++) {dp[i][j][k] = dp[i - 1][j][k];if (j > 0)dp[i][j][k] += dp[i - 1][j - 1][k];}}}}void init() {DP();for (int i = 1; i <= 1000; i++) {int n = (i + 4) / 2;if (i % 2 || i < 4) ans[i] = 0;else ans[i] = dp[n][3][0] + dp[n][4][1] + dp[n][4][0];}}int main() {init();int cas = 0;while (~scanf("%d", &n) && n) {printf("Case %d: %lld\n", ++cas, ans[n]);}return 0;}
1 0
- UVA 1073 - Glenbow Museum(数论+计数问题+递推)
- uva 1073 - Glenbow Museum(递推)
- uva live 4123 Glenbow Museum 数学递推
- Uva 1073 - Glenbow Museum 解题报告(组合)
- uvaoj 1073 - Glenbow Museum
- ACM: uva 1073 - Glenbow Museum
- UVA 10253 - Series-Parallel Networks(数论+计数问题+递推)
- LA 4123 Glenbow Museum (组合数)
- Glenbow Museum LA4123
- UVALive - 4123 Glenbow Museum
- uva1073 - Glenbow Museum
- UVALive 4123Glenbow Museum
- UVA 1350 - Pinary(数论+递推)
- UVA 11401 - Triangle Counting(数论+计数问题)
- UVA 11538 - Chess Queen(数论+计数问题)
- UVA 11645 - Bits(数论+计数问题)
- uvala 4123 WF2008 Glenbow Museum
- uva1073 Glenbow Museum【解法一】
- Lua 字符串库函数总结
- 英文IT缩写名称笔记,逐步补充
- strlen和sizeof的区别
- ubuntu上安装Erlang
- LeetCode Word Break (dp)
- UVA 1073 - Glenbow Museum(数论+计数问题+递推)
- Javaweb开发防止用户重复登录
- 哈希表之二----链地址法创建哈希表
- Myeclipse中左边的项目目录调没了,怎么再让它显示出来
- 关于Struts的Action
- Android学习笔记(十三)——碎片(一)
- bounds frame anchor position 的区分
- 嵌入式平台上的人脸检测系统(简单总结)
- Floyd求字典序最小的路径