UVA Cutting Sticks(记忆化搜索)
2013-04-25 10:32
435 查看
方程f[i,j]=0 if i+1==j,min(f[i,k]+f[k,j]+len[j]-len[i]) if 0<=i<j<=n+1
#include <cstdio> #include <iostream> #include <memory.h> using namespace std; int dp[60][60],len[60],n,L; int dfs_mem(int i,int j){ if(i+1==j)return 0; if(dp[i][j]!=-1)return dp[i][j]; dp[i][j]=2100000000; for (int k=i+1;k<j;++k){ dp[i][j]=min(dp[i][j],dfs_mem(i,k)+dfs_mem(k,j)+len[j]-len[i]); } return dp[i][j]; } int main(){ while (scanf("%d",&L)&&L){ scanf("%d",&n); memset(dp,-1,sizeof(dp)); len[0]=0; len[n+1]=L; for (int i=1;i<=n;++i){ scanf("%d",&len[i]); } printf("The minimum cutting is %d.\n",dfs_mem(0,n+1)); } return 0; }
相关文章推荐
- UVA 11008--Antimatter Ray Clearcutting+状态压缩记忆化搜索
- Cutting Sticks UVA - 10003
- Cutting Sticks UVA - 10003 (区间dp,线性dp)
- Cutting Sticks UVA - 10003
- UVA 11008 Antimatter Ray Clearcutting(状态压缩+记忆化搜索)
- uva 11008 Antimatter Ray Clearcutting(DFS + 记忆化搜索 + 状态压缩)
- Cutting Sticks UVA 10003(区间DP)
- uva11008 - Antimatter Ray Clearcutting 状态压缩记忆化搜索
- UVA 11008 Antimatter Ray Clearcutting(记忆化搜索 + 位运算)
- UVa 11008 Antimatter Ray Clearcutting(记忆化搜索)
- Cutting Sticks+uva+区间dp
- Cutting Sticks UVA - 10003 (区间Dp)
- uva 11008 Antimatter Ray Clearcutting 状态压缩+记忆化搜索
- uva 10581 - Partitioning for fun and profit(记忆化搜索+数论)
- uva 10239 - The Book-shelver's Problem(记忆化搜索)
- uva 10118 - Free Candies(记忆化搜索)
- uva 11008 - Antimatter Ray Clearcutting(状态dp)
- UVa 10891(记忆化搜索,递推)Game of Sum
- UVa 103 Stacking Box(记忆化搜索)
- UVA - 10604Chemical Reaction(记忆化搜索)