hdu 4570 Multi-bit Trie 区间DP入门
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 4570 Multi-bit Trie 区间DP入门相关的知识,希望对你有一定的参考价值。
Multi-bit Trie
题意:将长度为n(n <= 64)的序列分成若干段,每段的数字个数不超过20,且每段的内存定义为段首的值乘以2^(段的长度);问这段序列总的内存最小为多少?
思路:区间的最值,区间DP;
枚举长度,在初始化时,将长度和20比较,小于20看成是一段,大于20时,因为不能压缩,直接全部分割就是了;之后枚举区间内部的所有值,这是并不需要考虑将这个区间一分为二后各自的长度是否大于20,因为在子结构中已经计算好了;直接去最优解即可;
#include<iostream> #include<cstdio> #include<cstring> #include<string.h> #include<algorithm> #include<vector> #include<cmath> #include<stdlib.h> #include<time.h> #include<stack> #include<set> #include<map> #include<queue> using namespace std; #define rep0(i,l,r) for(int i = (l);i < (r);i++) #define rep1(i,l,r) for(int i = (l);i <= (r);i++) #define rep_0(i,r,l) for(int i = (r);i > (l);i--) #define rep_1(i,r,l) for(int i = (r);i >= (l);i--) #define MS0(a) memset(a,0,sizeof(a)) #define MS1(a) memset(a,-1,sizeof(a)) #define MSi(a) memset(a,0x3f,sizeof(a)) #define inf 0x3f3f3f3f #define lson l, m, rt << 1 #define rson m+1, r, rt << 1|1 typedef pair<int,int> PII; #define A first #define B second #define MK make_pair typedef __int64 ll; template<typename T> void read1(T &m) { T x=0,f=1;char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} m = x*f; } template<typename T> void read2(T &a,T &b){read1(a);read1(b);} template<typename T> void read3(T &a,T &b,T &c){read1(a);read1(b);read1(c);} template<typename T> void out(T a) { if(a>9) out(a/10); putchar(a%10+‘0‘); } ll dp[70][70],f[70],sum[70]; void solve(int n) { MSi(dp); for(int i = 0;i < n;i++){//[j,j+i] 区间内数的个数为i + 1; for(int j = 1;j <= n - i;j++){ int t = j + i; if(i < 20) dp[j][t] = f[j]*(1<<(i+1));//看成一段 else dp[j][t] = (sum[t] - sum[j-1])*2;// **乘2 for(int k = j + 1;k < t;k++){//区间DP中并不需要再次看k - j与20比较 dp[j][t] = min(dp[j][t],dp[j][k] + dp[k + 1][t]); } } } } int main() { int T,n; read1(T); while(T--){ read1(n); sum[0] = 0; rep1(i,1,n) read1(f[i]),sum[i] = sum[i - 1] + f[i]; solve(n); out(dp[1][n]);puts(""); } return 0; }
以上是关于hdu 4570 Multi-bit Trie 区间DP入门的主要内容,如果未能解决你的问题,请参考以下文章