频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
Uva 10970 大块巧克力(记忆式递归or规律)
2012-11-22 16:19:25           
收藏   我要投稿

[cpp]
//记忆式递归   
#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(i,j-1)+f(i,1)+1;   

int main(int argc, char *argv[]) 

    int m,n; 
    while(cin>>m>>n) 
    {   memset(d,-1,sizeof(d)); 
        cout<<f(m,n)<<endl;  
    } 
    return 0; 

//记忆式递归
#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(i,j-1)+f(i,1)+1; 
}
int main(int argc, char *argv[])
{
 int m,n;
 while(cin>>m>>n)
 {   memset(d,-1,sizeof(d));
  cout<<f(m,n)<<endl; 
 }
 return 0;
}
[cpp]
//找出规律   
#include <iostream>  
using namespace std; 
int main(int argc, char *argv[]) 

    int m,n; 
    while(cin>>m>>n) 
    {    
        cout<<m*n-1<<endl;   
    } 
    return 0; 

//找出规律
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
 int m,n;
 while(cin>>m>>n)
 {  
  cout<<m*n-1<<endl; 
 }
 return 0;
}

 

点击复制链接 与好友分享!回本站首页
上一篇:poj 2299
下一篇:Boost::any 简化单独版实现
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站