1. 程式人生 > >藍橋杯 演算法練習 數的劃分

藍橋杯 演算法練習 數的劃分

這個題目感覺到了用動態規劃,但是奈何組合數學的不好,沒有寫出狀態轉移方程

參考一個博主的部落格,寫出了滿分程式碼,還特意搜了一下斯特林數,學到了學到了

詳細解答在博主的部落格裡

連結如下

https://www.cnblogs.com/wengsy150943/p/5509787.html

這是一道不太一樣的dp題,他的邊界在遞推的中間,而且還要注意每一維度的範圍,否則知道狀態轉移方程也寫不出來

算是比一般dp要難一些的dp了吧

記下來備查

滿分程式碼如下

#include <iostream>
#include <memory.h>
using namespace std;
int dp[201][201];  //注意 陣列的第二維度的範圍要和第一維度一樣 要不然會出錯

int main()
{
	int n,m;
	cin>>n>>m;
	memset(dp,0,sizeof(dp));
	for(int i=1;i<=n;i++){
		for(int j=1;j<=i;j++){
			if(i==j){
				dp[i][j]=1;	
			}
			else dp[i][j]=dp[i-j][j]+dp[i-1][j-1];
		}
	}
	
	cout<<dp[n][m];
	return 0;
 }