UVa10970-思维||记忆化-Big Chocolate

来源:互联网 发布:合同登记软件 编辑:程序博客网 时间:2024/06/06 03:17

https://vjudge.net/problem/UVA-10970
有大佬说是组合数学,没有看出哪里组合了。。
给定一个m*n的巧克力,让你分割成m*n份。最少多少刀
我发现,无论是怎么切,好像刀数都一样,。ac了。。
百度了一下,还有用记忆话的
大概就是能切两刀就切,直到切成长度或者宽度为1的。
如果长和宽奇数的话,就随便切一小块,先成偶数再说。、
记忆化

#include <iostream>  #include <cstring>  using namespace std;  int d[305][305];  int f(int i,int j)  {      if(d[i][j]!=-1) return d[i][j];      if(i==1) return d[i][j]=j-1;      if(j==1) return d[i][j]=i-1;      if(i%2==0) return d[i][j]=2*f(i/2,j)+1;      else if(j%2==0) return d[i][j]=2*f(i,j/2)+1;      else return d[i][j]=f(1,j)+f(i-1,j)+1;    }  int main()  {      int m,n;      while(cin>>m>>n)      {   memset(d,-1,sizeof(d));          cout<<f(m,n)<<endl;       }      return 0;  }  
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){   int m,n;    while(~scanf("%d%d",&m,&n)){    printf("%d\n",(m-1)+m*(n-1));    }