HDU4570----Multi-bit Trie----简单的DP
来源:互联网 发布:java从键盘输入字符串 编辑:程序博客网 时间:2024/05/29 11:42
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4570
题目意思:
给你N个数
要你分成多段,每段长度不能超过20
是的sum(ai*(2^bi))最小,ai为每段第一个数,bi为长度
解题思路:
设dp[i] = min(dp[i],dp[j]+a[i]*2^(j-i)),1<=i<=n,i+1<=j<=min(i+20,n+1)
dp[i]表示以第i个作为总的开头的值
最后就dp[1]以及分成n段的一个比较
网上的代码很多,我写了一个迭代的,速度上要比记忆化搜索快一些
#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<iostream>using namespace std;#define ULL long longconst int maxn = 65;ULL dp[maxn];ULL a[maxn];int n;int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d",&n); ULL ans=0; for(int i=1;i<=n;i++) { cin>>a[i]; ans += a[i]*2; } dp[n] = a[n]*2; dp[n+1] = 0; for(int i=n-1;i>=1;i--) { dp[i] = (1ULL<<62-1); for(int j=i+1;j<=min(i+20,n+1);j++) { dp[i] = min(dp[i],dp[j]+a[i]*(1<<(j-i))); } } cout<<min(ans,dp[1])<<endl; } return 0;}
- HDU4570----Multi-bit Trie----简单的DP
- HDU4570:Multi-bit Trie(区间DP)
- HDU4570 Multi-bit Trie 区间DP
- hdu4570 Multi-bit Trie
- 【HDU4570】【Multi-bit Trie】
- hdu-4570-Multi-bit Trie-简单区间DP
- dp hdu-4570-Multi-bit Trie
- hdu 4570 Multi-bit Trie(dp水题)
- HDU 4570 - Multi-bit Trie(区间DP)
- HDU-4570 Multi-bit Trie (DP)
- HDU 4570 Multi-bit Trie (区间DP)
- HDU 4570 Multi-bit Trie(区间DP)
- hdu 4570 Multi-bit Trie 【区间dp】
- Hdu 4570 Multi-bit Trie(区间dp)
- HDU 4570 Multi-bit Trie(区间dp)
- hdu 4570 Multi-bit Trie (区间DP)
- hdu 4570 Multi-bit Trie
- HDU 4570 Multi-bit Trie 解题报告
- java设计模式之动态代理模式!
- HDU 2273
- web前端实现级联绑定
- 【使用了USB3.0扩展卡却没有加速怎么办】
- 小程序(十五)删除一个字符串中出现最少的字符
- HDU4570----Multi-bit Trie----简单的DP
- 给定无序数组A,在线性时间内找到i和j,j>i,并且保证A[j]-A[i]是最大的。
- WordPress模板制作技术手册
- android学习笔记15:方向传感器 指南针
- 我的异常Exception备忘学习JAVA牛人--有摘抄
- C语言栈与队列疑难点解析
- hdu2248
- 一些鲜为人知的编程真相
- 求素数的优化算法