uva 10003 lrj-P278 区间dp入门
来源:互联网 发布:单身约会软件 编辑:程序博客网 时间:2024/06/05 18:10
题意:
给出一根棍子的长度,以及n个需要切割的点,每一次切割的代价是这一段需要被切割的长度
问代价最小时的代价值
题解:
区间dp
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+a[j]-a[i]);i 为区间左端点,j 为右端点,k为中间的子问题
dp表示某一个区间的最小切割值
区间dp 的思路,先枚举区间大小,然后枚举区间的起始位置,此时就能知道区间的终止位置
然后枚举中间点,从子问题得到区间 i 到 j 的解
最后就能得到答案
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[100],dp[100][100];int main(){ int l,n; //freopen("in.txt","r",stdin); while(scanf("%d",&l),l) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); a[0]=0,a[n+1]=l; memset(dp,0x3f3f3f3f,sizeof(dp)); for(int i=1;i<=n;i++) dp[i-1][i]=0; dp[n][n+1]=0; for(int len=2;len<=n+1;len++) for(int i=0,j=i+len;i+len<=n+1;i++,j=i+len) for(int k=i+1;k<j;k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+a[j]-a[i]); printf("The minimum cutting is %d.\n",dp[0][n+1]); } return 0;}
阅读全文
0 0
- uva 10003 lrj-P278 区间dp入门
- Uva-1626 lrj-P278 区间dp
- uva 1331 lrj-P279 三角剖分+区间dp
- UVA 10003(p278)----CUtting Sticks
- UVA 10003 区间DP
- 区间dp uva 10003
- uva 12186 lrj-P282 简单树形dp
- 区间DP--初篇(UVA 10003)
- uva 1220 lrj-P282 最大独立集(树形dp)
- uva 1630 lrj-P305 字符串dp(记忆化)
- UVA 1626(p278)----Brackets Sequence
- UVa 10003 - Cutting Sticks 区间dp
- uva 10003 Cutting Sticks (区间dp)
- uva 10003 - Cutting Sticks(区间DP)
- uva 10003 Cutting Sticks(区间DP)
- UVA 10003 Cutting Sticks(区间dp)
- UVA 10003 - Cutting Sticks(区间DP)
- UVA 10003 —— 区间DP
- Linux学习(四):Linux文件系统及其shell命令
- 设置Xshell连不上CentOS虚拟机
- jdbc简单的使用
- mysql导入数据库出现异常(数据库字符集问题),如何解决??
- 时间工具类
- uva 10003 lrj-P278 区间dp入门
- Invade the Mars HDU
- 树上倍增解析(转载)
- Windows——JDK安装与环境变量配置
- ConcurrentHashMap总结
- Selenium怎样搭配TestNG
- jediscluster工具类
- 重写memcpy函数
- RMRC2016 G:Flow Shop (DP)