程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Uva 10970 大塊巧克力(記憶式遞歸or規律)

Uva 10970 大塊巧克力(記憶式遞歸or規律)

編輯:C++入門知識

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved