Codeforces 509F Progress Monitoring 给定dfs序求树的同构数 区间dp
来源:互联网 发布:尚趣网络 编辑:程序博客网 时间:2024/05/12 14:06
题目链接:点击打开链接
==说同构数有点不对。。反正就是这个意思,对于某个点的所有儿子,先访问标号小的,再访问标号大的。
dp[l][r]表示 区间[l,r] 构成一棵树的方法数。
对于一个区间[l, r] 构成一棵树,则点l一定是根,然后枚举2个区间相乘即可
dp[l][r] = dp[l+1][i] * dp[i+1][r] ( i = [l+1, r] )
当然 a[i+1] > a[l+1] ,这样才会满足题目中的暴力代码。
import java.io.PrintWriter;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.Map;import java.util.PriorityQueue;import java.util.Scanner;import java.util.Stack;import java.util.TreeMap;import java.util.TreeSet;import java.util.Queue;public class Main {int n;int[] a = new int[N];long[][] dp = new long[N][N];long dfs(int l, int r){if(dp[l][r] != -1)return dp[l][r];if(l >= r)return dp[l][r] = 1;long ans = 0;for(int i = l+1; i <= r; i++)if(i == r || a[i + 1] > a[l + 1])ans = (dfs(l+1, i) * dfs(i, r)+ans)%mod;return dp[l][r] = ans;}void work() {while(cin.hasNext()){n = cin.nextInt(); for(int i = 1; i <= n; i++)a[i] = cin.nextInt();for(int i = 1; i <= n; i++){for(int j = i; j <= n; j++)dp[i][j] = -1;}System.out.println(dfs(1, n));}}Main() {cin = new Scanner(System.in);out = new PrintWriter(System.out);}public static void main(String[] args) {Main e = new Main();e.work();out.close(); }public Scanner cin;public static PrintWriter out;static int N = 505;static int mod = 1000000007 ;}
0 0
- Codeforces 509F Progress Monitoring 给定dfs序求树的同构数 区间dp
- codeforces 509F Progress Monitoring (区间dp)
- codeforces 509F F. Progress Monitoring(区间dp)
- Progress Monitoring - CodeForces 509 F dp
- Codeforces 509F Progress Monitoring (区间dp 或 记忆化搜索)
- codeforces 509F Progress Monitoring
- 【CodeForce】509F Progress Monitoring(树形情景区间DP)
- Codeforces Round #289 (Div. 2, ACM ICPC Rules) F. Progress Monitoring 区间dp
- 数位dp续(给定区间求除以某个值余数一定的dp)dfs版
- ural 1203. Scientific Conference(dp)给定N个区间,求最大的不相交的区间数
- CodeForces 149D Coloring Brackets(区间DP+dfs)
- Codeforces 149 D Coloring Brackets(区间dp,标记状态,dfs)
- CodeForces 120F - 简单的树形DP
- 同构数的判断
- 数的同构
- Codeforces Round #427 (Div. 2) F-Roads in the Kingdom (树的直径,DFS+DP思想)
- 【Codeforces 500F】Dp
- 查找给定区间内第K大/小的数
- [codevs 1906] 最长递增子序列问题
- 总统选举
- 寒假刷题总结(专题一、六完结)
- esp 8266 之坑-- API 和SDK的bug
- Excel Sheet Column Number && Roman to Integer && Integer to Roman && Reverse Integer && Palindrome N
- Codeforces 509F Progress Monitoring 给定dfs序求树的同构数 区间dp
- llibphp5.so:cannot restore segment prot after reloc:Permission 在apache整合php时出现的问题
- POJ 1226 Substrings KMP暴力 或 后缀数组
- unity3d中的长按事件
- java基础:继承中的构造方法规则
- js常用正则表达式
- 内存关卡/栅栏 ( Memory Barriers / Fences ) – 译
- Ubuntu14.04 安装Matlab2013b
- ios俩个APP之间跳转、传值