SPOJ AEROLITE
题目链接: http://www.spoj.com/problems/AEROLITE/en/
--------------------------------------------------------------------------------------
虽然没有明确的区间,但做法还是和区间$DP$一样, 将左右两个区间合并成一个大区间
为了防止重复统计,每次左区间必须是有一个括号括在最外层的
自己做的方法的复杂度可达 $O((L1L2L3D)^2)$ 加上少量剪枝后仍有$3s$
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int mod = ;
long long f[][][][];
long long dfs(int l1, int l2, int l3, int d)
{
if(f[l1][l2][l3][d] != -)
return f[l1][l2][l3][d];
if(l1 + l2 + l3 == )
return f[l1][l2][l3][d] = (d == );
if(l1 + l2 + l3 < d)
return f[l1][l2][l3][d] = ;
f[l1][l2][l3][d] = ;
for(int b1 = ; b1 <= l1; ++ b1)
for(int b2 = ; b2 <= l2; ++ b2)
for(int b3 = ; b3 <= l3; ++ b3)
{
if(b1 + b2 + b3 == )
continue;
for(int d1 = ; d1 < d ; ++d1)
{
if(b1)
f[l1][l2][l3][d] += dfs(b1 - , b2, b3,
d1 - ) * dfs(l1 - b1, l2 - b2, l3 - b3, d);
else if(b2)
f[l1][l2][l3][d] += dfs(, b2 - , b3, d1 - )
* dfs(l1, l2 - b2, l3 - b3, d);
else
f[l1][l2][l3][d] += dfs(, , b3 - , d1 - )
* dfs(l1, l2, l3 - b3, d);
}
for(int d2 = ; d2 <= d; ++d2)
{
if(b1)
f[l1][l2][l3][d] += dfs(b1 - , b2, b3,
d - ) * dfs(l1 - b1, l2 - b2, l3 - b3, d2);
else if(b2)
f[l1][l2][l3][d] += dfs(, b2 - , b3, d - )
* dfs(l1, l2 - b2, l3 - b3, d2);
else
f[l1][l2][l3][d] += dfs(, , b3 - , d - )
* dfs(l1, l2, l3 - b3, d2);
}
}
return f[l1][l2][l3][d] %= mod;
}
int main()
{
int l1, l2, l3, d;
for(int ca = ; ca <= ; ++ca)
{
memset(f, -, sizeof f);
scanf("%d%d%d%d", &l1, &l2, &l3, &d);
printf("%lld\n", dfs(l1, l2, l3, d));
}
return ;
}
SPOJ AEROLITE的更多相关文章
- BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]
2588: Spoj 10628. Count on a tree Time Limit: 12 Sec Memory Limit: 128 MBSubmit: 5217 Solved: 1233 ...
- SPOJ DQUERY D-query(主席树)
题目 Source http://www.spoj.com/problems/DQUERY/en/ Description Given a sequence of n numbers a1, a2, ...
- SPOJ GSS3 Can you answer these queries III[线段树]
SPOJ - GSS3 Can you answer these queries III Description You are given a sequence A of N (N <= 50 ...
- 【填坑向】spoj COT/bzoj2588 Count on a tree
这题是学主席树的时候就想写的,,, 但是当时没写(懒) 现在来填坑 = =日常调半天lca(考虑以后背板) 主席树还是蛮好写的,但是代码出现重复,不太好,导致调试的时候心里没底(虽然事实证明主席树部分 ...
- SPOJ bsubstr
题目大意:给你一个长度为n的字符串,求出所有不同长度的字符串出现的最大次数. n<=250000 如:abaaa 输出: 4 2 1 1 1 spoj上的时限卡的太严,必须使用O(N)的算法那才 ...
- 【SPOJ 7258】Lexicographical Substring Search
http://www.spoj.com/problems/SUBLEX/ 好难啊. 建出后缀自动机,然后在后缀自动机的每个状态上记录通过这个状态能走到的不同子串的数量.该状态能走到的所有状态的f值的和 ...
- 【SPOJ 1812】Longest Common Substring II
http://www.spoj.com/problems/LCS2/ 这道题想了好久. 做法是对第一个串建后缀自动机,然后用后面的串去匹配它,并在走过的状态上记录走到这个状态时的最长距离.每匹配完一个 ...
- 【SPOJ 8222】Substrings
http://www.spoj.com/problems/NSUBSTR/ clj课件里的例题 用结构体+指针写完模板后发现要访问所有的节点,改成数组会更方便些..于是改成了数组... 这道题重点是求 ...
- SPOJ GSS2 Can you answer these queries II
Time Limit: 1000MS Memory Limit: 1572864KB 64bit IO Format: %lld & %llu Description Being a ...
随机推荐
- LeetCode 算法 Part 1
目录 1. 两数之和 1. 题目 2.代码 4. 算法用时 5. 感想 2. 两数相加 1. 题目 2.代码 4. 算法用时 5. 感想 3. 无重复字符的最长子串 1. 题目 2.代码 4. 算法用 ...
- BZOJ 1179 (Tarjan缩点+DP)
题面 传送门 分析 由于一个点可以经过多次,显然每个环都会被走一遍. 考虑缩点,将每个强连通分量缩成一个点,点权为联通分量上的所有点之和 缩点后的图是一个有向无环图(DAG) 可拓扑排序,按照拓扑序进 ...
- [CQOI2009]dance跳舞(最大流+二分)
[CQOI2009]dance跳舞 每个人拆成$2$个点,表示是否与喜欢的人跳舞 跳$m$首舞曲时,满足最大流为$n*m$ 二分$m$,跑最大流即可 #include<cstdio> #i ...
- 将地址转成blob格式(服务器下运行)
<div id="forAppend" class="demo"></div> <script> var eleAppend ...
- 帝国CMS模板中的多条件筛选方法
需求:点击某一条目,调出与该条目关键词相关的类似词条数据 要点: 1.帝国CMS灵动标签使用 [e:loop= 2.专题关键词筛选 enewszt 3.SQL语句筛选 select * fr ...
- 2018-2-13-win10-uwp-读写csv-
title author date CreateTime categories win10 uwp 读写csv lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17 ...
- linux系统升级openssh
一.升级前准备工作 安装openssh过程需gcc,zlib-devel,openssl-devel,等编译环境,如果通过rpm包来安装,需要解决各种依赖包,故配置本地yum源解决依赖问题. 1. 配 ...
- 修改编码为utf8mb4 以支持emoji表情
环境: 项目db的所有字符集都已经初始化为utf-8,如 status命令显示如下: Server characterset: utf8Db characterset: utf8Client char ...
- 解决安装mysql-connector-odbc-5.3.2 错误1918……不能加载安装或转换器库……的BUG
还是在虚拟机Windows Server 2003上安装mysql-connector-odbc-5.3.2,装着装着就报错了,大致是“错误1918……不能加载安装或转换器库……”,问我Retry,I ...
- SpringBoot---异步消息
1.概述 1.1.SpringBoot 对 JMS 的自动配置 位于 org.springframework.boot.autoconfigure.jms下: 1.2.SpringBoot 支 ...