UVA 10970 Big Chocolate(暴力,找规律)
2014-02-20 00:24
363 查看
给你一块n*m的巧克力,现在要把它切成n*m个小块,每刀只能沿着一条直线把一块巧克力切成两部分,问你最少切几刀?
先想想暴力的方法,我们可以用dp[i][j]表示把一块i*j的巧克力切开最少需要几刀,注意到dp[i][j]=dp[j][i],所以我们只需要处理i<=j的情况。显然边界条件是dp[1][j]=j-1。在转移的时候只需要枚举在哪里切开就可以了:
dp[i][j]=min(dp[x][j]+dp[y][j])+1其中x+y=i。
dp[i][j]=min(dp[i][x]+dp[i][y])+1其中x+y=j。
记忆化搜索先预处理出所有情况即可。
有了暴力程序,我们也可以找找规律,我们先固定一个变量,如看看(4,1),(4,2),(4,3),(4,4)有什么规律,很容易发现数列dp[i][j]=dp[i][j-1]+i,又有初始条件dp[i][1]=i-1。得:
dp[i][j]=i*j-1,此式具有对称性(dp[i][j]=dp[j][i]),与事实相合。
暴力代码:
找规律:
先想想暴力的方法,我们可以用dp[i][j]表示把一块i*j的巧克力切开最少需要几刀,注意到dp[i][j]=dp[j][i],所以我们只需要处理i<=j的情况。显然边界条件是dp[1][j]=j-1。在转移的时候只需要枚举在哪里切开就可以了:
dp[i][j]=min(dp[x][j]+dp[y][j])+1其中x+y=i。
dp[i][j]=min(dp[i][x]+dp[i][y])+1其中x+y=j。
记忆化搜索先预处理出所有情况即可。
有了暴力程序,我们也可以找找规律,我们先固定一个变量,如看看(4,1),(4,2),(4,3),(4,4)有什么规律,很容易发现数列dp[i][j]=dp[i][j-1]+i,又有初始条件dp[i][1]=i-1。得:
dp[i][j]=i*j-1,此式具有对称性(dp[i][j]=dp[j][i]),与事实相合。
暴力代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define maxn 309 using namespace std; int dp[maxn][maxn]; bool vis[maxn][maxn]; int DP(int n,int m) { if(vis [m])return dp [m]; vis [m]=1; int &ans=dp [m]; if(n==1)return ans=m-1; if(m==1)return ans=n-1; ans=(1<<30); for(int i=1;i<=n-1;i++) ans=min(ans,DP(min(i,m),max(i,m))+DP(min(n-i,m),max(n-i,m))+1); for(int i=1;i<=m-1;i++) ans=min(ans,DP(min(n,i),max(n,i))+DP(min(n,m-i),max(n,m-i))+1); return ans; } int main() { int n,m; for(int i=1;i<=300;i++) for(int j=i;j<=300;j++) DP(i,j); while(scanf("%d%d",&n,&m)!=EOF) { printf("%d\n",DP(min(n,m),max(n,m))); } }
找规律:
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define maxn 309 using namespace std; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { printf("%d\n",n*m-1); } }
相关文章推荐
- 【UVALive】2037 - Digital Rivers(找规律,暴力)
- UVA - 10120 Gift?! 暴力+规律
- UVALive 6862 Triples (找规律 暴力)
- uva 270 Lining Up(暴力+ 几何)
- UVALive 4886|HDU 3777|Page Count|暴力
- UVa 818Cutting Chains (暴力dfs+位运算+二进制法)
- 紫书搜索 习题7-4 UVA - 818 Cutting Chains 暴力+dfs判环+位运算
- UVA 617 - Nonstop Travel(数论+暴力枚举)
- 【数论 && 找规律】UVA 11752 The Super Powers
- 暴力枚举--uva10132
- UVA 12627 <递归找规律,紫书p245页例题>
- UVALive2536 POJ1248 HDU1015 ZOJ1403 Safecracker【密码+暴力+水题】
- UVA 725 Divsion(暴力枚举)
- uva 11464 暴力枚举矩阵
- 2015多校第7场 HDU 5373 The shortest problem 规律,暴力
- UVa 818:Cutting Chains(暴力)
- uva 1583 B - Digit Generator (暴力)
- uva1315 Crazy tea party(找规律)
- uva 10881 Piotr's Ants 规律
- uva 10825 - Anagram and Multiplication(暴力)