如何优化暴力搜索

在这里插入图片描述
在这里插入图片描述

这个题目别看n和m只有100的范围,但是暴力算的话会超时,先看一下暴力的做法

#include<bits/stdc++.h>
using namespace std;

int n, m;
const int mo = (int)1e9 + 7;
int ans = 0;
// 规定1是店,2是花
void dfs(int dian, int hua,int jiu,int last) {
	if (dian > n || hua > m || jiu<0) return;
	if (dian == n && hua == m && jiu == 0&&last==2) {
		ans=(ans+1)%mo; return;
	}
	dfs(dian + 1, hua, jiu * 2,1);
	if (jiu) {
		dfs(dian, hua + 1, jiu - 1,2);
	}
}

int main() {
	cin >> n >> m;
	dfs(0, 0, 2,0);
	cout << ans;
	return 0;
}

在这里插入图片描述
不出意外会超时,我想着就记忆化搜索吧,但是发现,好像空间开不了那么大

int dp[105][105][1025][3];
// 规定1是店,2是花
int dfs(int dian, int hua,int jiu,int last) {
	if (jiu < 1025 && jiu >=0) {
		if(dp[dian][hua][jiu][last])  return dp[dian][hua][jiu][last];
	}
	//if (jiu<1025 && dp[dian][hua][jiu][last]) return dp[dian][hua][jiu][last];
	if (dian > n || hua > m || jiu<0) return 0;
	if (dian == n && hua == m && jiu == 0&&last==2) {
		ans=(ans+1)%mo; return 0;
	}
	return dfs(dian + 1, hua, jiu * 2, 1) + (jiu ? dfs(dian, hua + 1, jiu - 1, 2) : 0);
}

那现在还能怎么办,其实如果酒的数量大于花的数量,那么这个是无解 的

#include<bits/stdc++.h>
using namespace std;

#define int long long
int n, m;
const int mo = (int)1e9 + 7;
int ans = 0;
int dp[105][105][105];

int dfs(int dian, int hua, int jiu) {
	if (jiu > hua) return 0; // 酒大于花
	if (jiu < 0) return 0;// 酒变成负数了
	if (jiu == hua && dian != 0) return 0;
	if (dp[dian][hua][jiu] != -1) return dp[dian][hua][jiu];
	dp[dian][hua][jiu] = 0;
	if (dian) {
		dp[dian][hua][jiu] = dfs(dian - 1, hua, jiu * 2)%mo;
	}
	if (hua && jiu) {
		if (hua == 1 && jiu == 1) {
			dp[dian][hua][jiu] = (dp[dian][hua][jiu]+1)%mo;
		}
		else {
			dp[dian][hua][jiu] = (dp[dian][hua][jiu] + dfs(dian, hua - 1, jiu - 1))%mo;
		}
	}
	return dp[dian][hua][jiu];
}

signed main() {
	cin >> n >> m;
	memset(dp, -1, sizeof dp);
	int d = dfs(n, m, 2)%mo;
	cout << d;
	return 0;
}

相关推荐

  1. 如何防止服务器被暴力破解

    2024-07-16 22:04:03       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 22:04:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 22:04:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 22:04:03       58 阅读
  4. Python语言-面向对象

    2024-07-16 22:04:03       69 阅读

热门阅读

  1. ABC分析模型详解

    2024-07-16 22:04:03       18 阅读
  2. Ceph资源池pool管理

    2024-07-16 22:04:03       18 阅读
  3. 常用知识点问答

    2024-07-16 22:04:03       21 阅读
  4. MongoDB 面试题及答案整理,最新面试题

    2024-07-16 22:04:03       19 阅读
  5. 记录一次Android推流、录像踩坑过程

    2024-07-16 22:04:03       20 阅读
  6. LINUX:懒汉单例模式线程池

    2024-07-16 22:04:03       20 阅读
  7. flask-login会话保持实现

    2024-07-16 22:04:03       23 阅读
  8. C调用C++接口

    2024-07-16 22:04:03       22 阅读
  9. 年轻人如何克服焦虑

    2024-07-16 22:04:03       19 阅读
  10. 设计模式10-抽象工厂

    2024-07-16 22:04:03       18 阅读