UVA 1629 - Cake slicing 题解
来源:互联网 发布:淘宝免单可信吗 编辑:程序博客网 时间:2024/06/06 05:14
题意:在一块方形蛋糕上有N个樱桃,只能横,竖切割,切割最小长度使得每一块上蛋糕上有且仅有一个樱桃。
思路:基础动态规划
转移方程:dp[n][m][h][w]=min(dp[n][m][h][t]+dp[n][m+t][h][w-t]+w, dp[n][m][t][w]+dp[n+t][m][h-t][w]+w);
n m 表示矩阵大小, t表示从t出切割,造成的最优解。当然切割后的两块 都要有樱桃 才能切割。
AC代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define clr(a,b) memset(a,b,sizeof(a))#define repu(i,a,b) for(int i=a; i<=b; ++i)using namespace std;const int maxn=25;const int INF=1<<29;int n, m, k;int x, y;int kase=0;int g[maxn][maxn];int num[maxn][maxn];int exist[maxn][maxn][maxn][maxn];int dp[maxn][maxn][maxn][maxn];void Clear();int main(){ while(~scanf("%d%d%d", &n, &m, &k)){ Clear(); for(int i =0; i<k;++i){ scanf("%d%d", &x, &y); g[x][y]=1; } repu(i,1,n) repu(j,1,m) num[i][j]=num[i-1][j]+num[i][j-1]-num[i-1][j-1]+g[i][j]; repu(x,1,n) repu(y,1,m) repu(h,1,n-x+1) repu(w,1,m-y+1) exist[x][y][h][w]=num[x+h-1][y+w-1]-num[x+h-1][y-1]-num[x-1][y+w-1]+num[x-1][y-1]; int tmp; repu(h,1,n) repu(w,1,m) repu(x,1,n-h+1) repu(y,1,m-w+1){ int &ans=dp[x][y][h][w]; if(exist[x][y][h][w]==0) ans=INF; else if(exist[x][y][h][w]==1) ans=0; else { ans=INF; repu(t, 1, h-1) if(exist[x][y][t][w]>0 && exist[x+t][y][h-t][w]>0){ tmp=dp[x][y][t][w]+dp[x+t][y][h-t][w]+w; if(ans>tmp) ans=tmp; } repu(t, 1, w-1) if(exist[x][y][h][t]>0 && exist[x][y+t][h][w-t]>0){ tmp=dp[x][y][h][t]+dp[x][y+t][h][w-t]+h; if(ans>tmp) ans=tmp; } } } printf("Case %d: %d\n", ++kase, dp[1][1][n][m]); } return 0;}void Clear(){ clr(g, 0); clr(num, 0);}
0 0
- UVA 1629 - Cake slicing 题解
- UVa 1629 - Cake slicing
- UVA 1629 Cake slicing
- UVa 1629 Cake Slicing DP
- uva - 1629 Cake slicing(dp)
- uva 1629 cake slicing(dp)
- Uva-1629 Cake slicing(DP)
- UVa #1629 Cake slicing (习题9-3)
- [UVA 1629]Cake slicing[记忆化搜索]
- [DP枚举]UVa 1629 - Cake slicing
- uva 1629——Cake slicing
- UVa 1629 Cake Slicing (切蛋糕)
- Cake slicing UVA
- Cake slicing UVA
- 1629 - Cake slicing
- UVa 1629 - Cake slicing(记忆化搜索)
- uva 1629 - Cake slicing 切蛋糕 动归
- UVa 1629 Cake slicing (记忆化搜索)
- 通过bundle对象实现Fragment之间的传值
- eclipse struts2 错误及解决方法
- lintcode-线段树的构造-201
- Android综合小练习Fragment,解析,Handler,ViewPager
- popupWindow的用法(1)
- UVA 1629 - Cake slicing 题解
- gym Learning to Add 一个水题 结果看错题意了
- hdu1426搜索
- 定义类class
- IOS SEL类型
- IOS每天15个注意点系列之UI-tableView
- CSS3基础
- 【SQL Server 2008】基础知识—数据库相关概念及操作
- VC++6_0调试篇:变量的观察--watch窗口的技巧