UVa 10003 - Cutting Sticks(区间DP+记忆化)
2015-07-25 14:10
274 查看
给出一个木棒和mm个切点,每次切割需要花费等于当前木棒长度的费用。问最小花费。
对整个区间DP然后枚举区间的所有间断点。
转移方程为d[i][j]=min(d[i][k]+d[k][j])d[i][j]=min(d[i][k]+d[k][j])。
网上搜到的优化版本:
对整个区间DP然后枚举区间的所有间断点。
转移方程为d[i][j]=min(d[i][k]+d[k][j])d[i][j]=min(d[i][k]+d[k][j])。
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=55; const int inf=0x3f3f3f3f; int a[maxn],d[maxn][maxn]; int dp(int l,int r){ int& k=d[l][r]; if(l>=r-1) return k=0; if(k!=inf) return k; for(int i=l+1;i<r;++i) k=min(k,dp(l,i)+dp(i,r)+a[r]-a[l]); return k; } int main(){ int l,n; while(~scanf("%d",&l)&&l){ memset(d,0x3f,sizeof(d)); scanf("%d",&n); a[0]=0,a[n+1]=l; for(int i=1;i<=n;++i) scanf("%d",&a[i]); printf("The minimum cutting is %d.\n",dp(0,n+1)); } return 0; }
网上搜到的优化版本:
#include <cstdio> #include <cctype> #include <cstring> #include <algorithm> using namespace std; inline int Rint() { int c; while(!isdigit(c = getchar())); int t = c ^ 48; while(isdigit(c = getchar())) t = (t << 1) + (t << 3) + (c ^ 48); return t; } const int N = 55; int d , s , x ; int main() { for (int l; scanf("%d", &l) == 1 && l; ) { int n = Rint(); for (int i = 1; i <= n; ++i) x[i] = Rint(); x[++n] = l; for (int i = 0; i < n; ++i) d[i][i+1] = 0, s[i][i+1] = i; for (int i = n - 2; i >= 0; --i) for (int j = i + 2; j <= n; ++j) { int val = 2000000, p; int st = max(s[i][j-1], i + 1), dt = min(s[i + 1][j], j - 1); for (int k = st; k <= dt; ++k) { int t = d[i][k] + d[k][j]; if (t < val) val = t, p = k; } d[i][j] = val + x[j] - x[i], s[i][j] = p; } printf("The minimum cutting is %d.\n", d[0] ); } return 0; }
相关文章推荐
- 一些常用到的Centos命令
- php在eclipse的控制台console输出调试信息功能实现
- 最简单的基于FFmpeg的移动端例子:Android 推流器
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究 转载
- android theme 与控件的关系
- 7.23计划
- COJN 0487 800301红与黑
- BindingFlags 枚举
- lua技巧分享之保护执行
- sgu 104 Little shop of flowers
- 约瑟夫问题
- Java程序dos中编译运行
- 手机游戏产品经理(七)创建本地化产品的意见
- python基础教程总结13——网络编程,
- 从SAP的核心优势看SAP四大战略成功的可能
- C++ 的那些坑 (Day 0)
- Online Judge System For SzNOI 题库 语法百题 c++ d040
- BZOJ 1798 [Ahoi2009]Seq 维护序列seq 线段树
- 修改软件源为163的镜像
- 二分图判断(模板)