当前位置:编程学习 > C/C++ >>

Uva 10970 大块巧克力(记忆式递归or规律)

[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;
}

 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,