题目链接: 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的更多相关文章

  1. 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 ...

  2. SPOJ DQUERY D-query(主席树)

    题目 Source http://www.spoj.com/problems/DQUERY/en/ Description Given a sequence of n numbers a1, a2, ...

  3. 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 ...

  4. 【填坑向】spoj COT/bzoj2588 Count on a tree

    这题是学主席树的时候就想写的,,, 但是当时没写(懒) 现在来填坑 = =日常调半天lca(考虑以后背板) 主席树还是蛮好写的,但是代码出现重复,不太好,导致调试的时候心里没底(虽然事实证明主席树部分 ...

  5. SPOJ bsubstr

    题目大意:给你一个长度为n的字符串,求出所有不同长度的字符串出现的最大次数. n<=250000 如:abaaa 输出: 4 2 1 1 1 spoj上的时限卡的太严,必须使用O(N)的算法那才 ...

  6. 【SPOJ 7258】Lexicographical Substring Search

    http://www.spoj.com/problems/SUBLEX/ 好难啊. 建出后缀自动机,然后在后缀自动机的每个状态上记录通过这个状态能走到的不同子串的数量.该状态能走到的所有状态的f值的和 ...

  7. 【SPOJ 1812】Longest Common Substring II

    http://www.spoj.com/problems/LCS2/ 这道题想了好久. 做法是对第一个串建后缀自动机,然后用后面的串去匹配它,并在走过的状态上记录走到这个状态时的最长距离.每匹配完一个 ...

  8. 【SPOJ 8222】Substrings

    http://www.spoj.com/problems/NSUBSTR/ clj课件里的例题 用结构体+指针写完模板后发现要访问所有的节点,改成数组会更方便些..于是改成了数组... 这道题重点是求 ...

  9. SPOJ GSS2 Can you answer these queries II

    Time Limit: 1000MS   Memory Limit: 1572864KB   64bit IO Format: %lld & %llu Description Being a ...

随机推荐

  1. mysql自动补全功能(只能用于表/列 名)

    关键字:mysql自动补全,auto-rehash 注:只能补齐表,列名,使用tab进行补全操作 一.修改my.cnf vi /etc/my.cnf [mysql] auto-rehash #添加au ...

  2. Elasticsearch安装及遇到的问题(CentOS 7.3 64位)

    Elasticsearch安装 使用root用户创建一个其他用户,(elasticsearch不能在root账户下安装) # 添加一个名字是es工作组 groupadd es # 添加用户es设置密码 ...

  3. HDFS基本概念

    概念 HDFS,它是一个文件系统,用于存储文件,通过目录树来定位文件:其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色. 注意:HDFS的设计适合一次写入,多次读出的场景 ...

  4. MD5加密 和 自定义加密解密

    public class EncryptString { /// <summary> /// MD5加密 /// </summary> /// <param name=& ...

  5. Java中的容器(集合)之ArrayList源码解析

    1.ArrayList源码解析 源码解析: 如下源码来自JDK8(如需查看ArrayList扩容源码解析请跳转至<Java中的容器(集合)>第十条):. package java.util ...

  6. [Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset)

    [Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset) 题面 一个长为 n 的序列 a.有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间 ...

  7. java 多态 (知识点不完整)

    1.多态的条件 1.要有继承 2.方法重写 3.父类引用指向子类对象 多态中成员访问 1.   访问成员变量:  编译看左边,运行也看左边 f.num = 10 因为这里是父类的,看是父类Father ...

  8. wxpython模板程序,包括各个实例

    #coding=utf-8 import wx import time import os class MyApp(wx.App): def __init__(self): wx.App.__init ...

  9. C#设计模式:中介者模式(Mediator Pattern)

    一,什么是中介者模式(Mediator Pattern)? 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.比如:如果我们实现两个人的交互,难道我们要定义两个对象 ...

  10. 关键字static介绍

    static关键字 java中针对多个对象有共同的成员变量值得时候,就提供了static关键字来修饰. (1)静态的意思.可以修饰成员变量和成员方法. (2)静态的特点: A:随着类的加载而加载 B: ...