求判断时间复杂度
  • 板块P1388 算式
  • 楼主LYM20114
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/11/13 19:42
  • 上次更新2023/10/27 03:03:58
查看原帖
求判断时间复杂度
531776
LYM20114楼主2022/11/13 19:42
#include <iostream>
#include <cstring>
using namespace std;
int f[20][20][20][20];
int n,k,num[25];
int dp(int l,int r,int plus,int chen){
	if(l == r){
		f[l][r][plus][chen] = num[l];
		return f[l][r][plus][chen];
	}
	if(f[l][r][plus][chen] > -1) return f[l][r][plus][chen];
	int maxn = 0;
	for(int i = l;i < r;i++){
		if(plus >= 1){
			for(int j = 0;j < plus;j++) 
				for(int k = 0;k <= chen;k++)
					maxn = max(maxn,dp(l,i,j,k) + dp(i + 1,r,plus - 1 - j,chen - k));
		}
		if(chen >= 1){
			for(int j = 0;j <= plus;j++) 
				for(int k = 0;k < chen;k++)
					maxn = max(maxn,dp(l,i,j,k) * dp(i + 1,r,plus - j,chen - 1 - k));
		}
	}
	return f[l][r][plus][chen] = maxn;
}
int main(){
	memset(f,-1,sizeof f);
	cin >> n >> k;
	for(int i = 1;i <= n;i++)
		cin >> num[i];
	cout << dp(1,n,n - k - 1,k) << endl;
	return 0;
}
2022/11/13 19:42
加载中...