UVa 10003 Cutting Sticks (区间dp)
2014-08-09 08:30
323 查看
链接:UVa 10003
题意:给出一根木棍的长度,及木棍上的n个点,要在这n个点处切断木棍,在切断木棍时木棍有多长就花费多少代价,求将给定的所有点都切断的最小代价
分析:这个是区间dp的题,用dp[i][j]数组表示在区间[i,j]内切割木棍的最小代价,
则状态转移方程为dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j]+a[j]-a[i])
(i<=k< j)
参考代码:
题意:给出一根木棍的长度,及木棍上的n个点,要在这n个点处切断木棍,在切断木棍时木棍有多长就花费多少代价,求将给定的所有点都切断的最小代价
分析:这个是区间dp的题,用dp[i][j]数组表示在区间[i,j]内切割木棍的最小代价,
则状态转移方程为dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j]+a[j]-a[i])
(i<=k< j)
参考代码:
#include<stdio.h> #include<string.h> #define M 100000 int min(int a,int b) { return a<b?a:b; } int main() { int a[55],n,i,j,l,r,k,m,dp[55][55]; while(scanf("%d",&m)!=EOF){ if(m==0) break; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); a[0]=0; //添加头尾点 a[n+1]=m; for(i=0;i<=n;i++){ dp[i][i+1]=0; for(j=i+2;j<=n+1;j++) dp[i][j]=M; } for(i=1;i<=n+1;i++) //分段 for(l=0;l<=n+1-i;l++){ //r-l=i<=n+1 --> l<=n+1-i r=l+i; for(k=l+1;k<r;k++) dp[l][r]=min(dp[l][r],dp[l][k]+dp[k][r]+a[r]-a[l]); } printf("The minimum cutting is %d.\n",dp[0][n+1]); } return 0; }
#include<stdio.h> #include<string.h> #define M 100000 int a[55],dp[55][55]; int min(int a,int b) { return a<b?a:b; } int my_dp(int l,int r) { int i; if(dp[l][r]!=M) return dp[l][r]; for(i=l+1;i<r;i++) dp[l][r]=min(dp[l][r],my_dp(l,i)+my_dp(i,r)+a[r]-a[l]); return dp[l][r]; } int main() { int i,j,n,m; while(scanf("%d",&m)!=EOF){ if(m==0) break; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); a[0]=0; a[n+1]=m; for(i=0;i<=n;i++){ dp[i][i+1]=0; for(j=i+2;j<=n+1;j++) dp[i][j]=M; } my_dp(0,n+1); printf("The minimum cutting is %d.\n",dp[0][n+1]); } return 0; }
相关文章推荐
- 区间dp(uva10304-Optimal Binary Search Tree)
- UVAlive 4857 - Halloween Costumes 区间dp
- UVA - 10891 Game of Sum (区间DP)@
- UVA 10891 Game of Sum 总和一定的博弈,区间dp
- UVA 10891 Game of Sum(区间DP)
- UVA-1336 Fixing the Great Wall(区间DP)
- uva 1331 lrj-P279 三角剖分+区间dp
- [Uva10641]Barisal Stadium(区间dp)
- Cutting Sticks UVA - 10003 (区间dp,线性dp)
- UVA 10891 - Game of Sum(区间dp)
- ★Uva 1626 && POJ 1141 Brackets sequence 详细题解(区间DP+递归打印)
- uva 1351 - String Compression(区间DP,好题,较难)
- UVA 1632 区间DP
- UVA 1351 - String Compression(区间DP)
- UVA 10891 Game of Sum (博弈论 + 区间dp)
- 【区间dp】【记忆化搜索】UVALive - 3516 - Exploring Pyramids
- uva 10304 Optimal Binary Search Tree(区间dp)
- Uva 10617 Again Palindrome(区间dp)
- UVA-1632 Alibaba (区间DP+滚动数组)
- UVA 11584 Partitioning by Palindromes (区间DP)