1. 程式人生 > >【qduoj - 夏季學期創新題】矩形剖分(遞迴,dp)

【qduoj - 夏季學期創新題】矩形剖分(遞迴,dp)

題幹:

描述

 

對一個給定的矩形,將其劃分成儘可能少的正方形,輸出正方形的最少個數。例如,如下圖所示的情況,則輸入為3和4,輸出為4。SE2{{)C18F[WGE]_XOEDYZ8.png

輸入

 

輸入兩個整數中間用空格分開。

輸出

 

輸出最少分割成的正方形的個數。

輸入樣例 1 

3 4

輸出樣例 1

4

解題報告:

   簡單遞迴。  這題如果是t組資料的話,這個f函式就可以寫記憶化了。。。但是這個題就沒必要了,因為狀態轉移之間沒有重疊子問題,所以不需要dp。

AC程式碼:

#include<bits/stdc++.h>

using namespace std;
int f(int x,int y) {
	if(x == y) return 1;
	if(x > y) {
		return f(x-y,y) + 1;
	}
	else return f(y-x,x) + 1;
}
int main()
{
	int n,m;
	while(cin>>n>>m) {
		cout << f(n,m)<<endl;
	}
	
	return 0;
 }