HDU 4570 Multi-bit Trie (区间DP)

原创 2016年08月30日 18:53:12

Multi-bit Trie

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 803 Accepted Submission(s): 342

Problem Description
  IP lookup is one of the key functions of routers for packets forwarding and classifying. Generally, IP lookup can be simplified as a Longest Prefix Matching (LPM) problem. That’s to find the longest prefix in the Forwarding Information Base (FIB) that matches the input packet’s destination address, and then output the corresponding Next Hop information.

  Trie-based solution is the most wildly used one to solve LPM. As shown in Fig.1(b), an uni-bit trie is just a binary tree. Processing LPM on it needs only traversing it from the root to some leaf, according to the input packet’s destination address. The longest prefix along this traversing path is the matched one. In order to reduce the memory accesses for one lookup, we can compress some consecutively levels of the Uni-bit Trie into one level, transforming the Uni-bit Trie into a Multi-bit Trie.
  For example, suppose the strides array is {3, 2, 1, 1}, then we can transform the Uni-bit Trie shown in Fig.1(b) into a Multi-bit Trie as shown in Fig.1(c). During the transforming process, some prefixes must be expanded. Such as 11(P2), since the first stride is 3, it should be expanded to 110(P2) and 111(P2). But 110(P5) is already exist in the FIB, so we only store the longer one 110(P5).
  Multi-bit Trie can obviously reduce the tree level, but the problem is how to build a Multi-bit Trie with the minimal memory consumption (the number of memory units). As shown in Fig.1, the Uni-bit Trie has 23 nodes and consumes 46 memory units in total, while the Multi-bit Trie has 12 nodes and consumes 38 memory units in total.

Input
  The first line is an integer T, which is the number of testing cases.
  The first line of each case contains one integer L, which means the number of levels in the Uni-bit Trie.
  Following L lines indicate the nodes in each level of the Uni-bit Trie.
  Since only 64 bits of an IPv6 address is used for forwarding, a Uni-bit Trie has maximal 64 levels. Moreover, we suppose that the stride for each level of a Multi-bit Trie must be less than or equal to 20.

Output
  Output the minimal possible memory units consumed by the corresponding Multi-bit Trie.

Sample Input
1
7
1
2
4
4
5
4
3

Sample Output
38

Source
2013 ACM-ICPC长沙赛区全国邀请赛——题目重现

给出一个长度为n的数列,将其分成若干段,要求最小,其中ai是每一段数列的第一项,bi是每一段的长度,l为将数列分成l段。

比如样例:n=7,A={1 2 4 4 5 4 3},将其分成1 2 4| 4 5| 4| 3,则其所用空间为1*2^3+4*2^2+4*2^1+3*2^1=38,而如果分成1 2| 4 4 5| 4 3,则其所用空间为1*2^2+4*2^3+4*2^2=52,比38大。

#include "cstring"
#include "string.h"
#include "iostream"
#include "algorithm"
#include "cstdio"
using namespace std;
long long a[100];
long long dp[100][100];
long long sum[100];
int main()
{
    int cas;
    scanf("%d",&cas);
    while(cas--)
    {
        int n;
        scanf("%d",&n);
        memset(dp,0,sizeof(dp));
        sum[0]=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&a[i]);
            sum[i]=sum[i-1]+a[i];
        }
        for(int len=1;len<=n;len++)
        {
            for(int i=1;i+len-1<=n;i++)
            {
                if(len<=20)
                    dp[i][i+len-1]=a[i]*(1<<len);
                else
                    dp[i][i+len-1]=(sum[i+len-1]-sum[i-1])*2;
                for(int j=i;j<=i+len-1;j++)
                    dp[i][i+len-1]=min(dp[i][i+len-1],dp[i][j]+dp[j+1][i+len-1]);
            }
        }
        printf("%lld\n",dp[1][n]);
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

区间DP 入门经典三道题

NYOJ 737:http://acm.nyist.net/JudgeOnline/problem.php?pid=737 代码:#include #include #include #def...
  • SolarDomo
  • SolarDomo
  • 2016年08月15日 14:17
  • 483

几个经典的贪心区间问题之区间调度hdu2037

说在前面 今天打了场比赛有个很简单的区间贪心问题写得磕磕绊绊,因此深感几个经典的区间贪心问题还是应该重新看看并加以总结形成模板。这种问题就应该像大神们那样十几分钟内稀里哗啦的敲出来。 A.区间调度...
  • qq_35495556
  • qq_35495556
  • 2016年07月26日 00:19
  • 522

字典树(Trie)hdu2846

Online Judge Online Exercise Online Teaching Online Contests Exercise Author F.A.Q Hand In...
  • u010660276
  • u010660276
  • 2014年08月17日 13:53
  • 375

区间DP入门之 石子归并问题

题目描述:有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最...
  • wuxuanyi27
  • wuxuanyi27
  • 2016年04月21日 21:40
  • 857

动态规划学习系列——区间DP(一)

学习一个算法,还是从题目开始比较好,我们就从一道经典例题开始: wikioi 1048 石子归并 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相...
  • fuyukai
  • fuyukai
  • 2015年02月13日 17:13
  • 812

dp 计数问题 复杂整数划分 区间dp

百练的题目 : 让我对dp有了新体会 这是记忆化搜索写法 省了很多时间 并且状态转移的方式符合我们的认知  这个通过递推很难发现关系 但是讲区间搜索一下分解的话就可以计数了 并且在不影响结果的前提下自...
  • qq_34271269
  • qq_34271269
  • 2016年07月19日 21:32
  • 350

hdu 数位DP汇总 + hdu 4507 题解

基础教学 + 初探hdu2089题解:http://blog.csdn.net/techmonster/article/details/50273967 进阶 【重要模板】(数位dp几乎都是这个模板)...
  • Techmonster
  • Techmonster
  • 2015年12月13日 16:55
  • 612

线段树 hdu5700 区间交

传送门:点击打开链接 题意:有n个区间,求k个区间,使得这k个区间相交的区间内数字之和最大。数列的数字均>=0 思路:通常这种题目我们都会先按照区间的右区间位置排序。之后的步骤如果想到了,就会变得...
  • qwb492859377
  • qwb492859377
  • 2016年05月23日 10:45
  • 1183

区间dp模型(石子归并,括号匹配,整数划分)

区间dp顾名思义就是在一个区间上进行的一系列动态规划。对一些经典的区间dp总结在这里。 1) 石子归并问题 题目链接:http://acm.nyist.edu.cn/JudgeOnline/p...
  • y990041769
  • y990041769
  • 2014年04月20日 21:51
  • 16284

HDU5381【莫队算法+区间GCD特性】

NO RESPONSE!
  • KEYboarderQQ
  • KEYboarderQQ
  • 2017年02月18日 22:36
  • 398
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 4570 Multi-bit Trie (区间DP)
举报原因:
原因补充:

(最多只允许输入30个字)