dfs+剪枝
#include <iostream>
using namespace std;
bool visit[1005]={
false};
int ans=0;
int n,mon;
int w[1005];///菜品价格
int cnt1=0,cnt=0;
///01背包用搜索解决,每个东西只能选一次,注意index的使用!!!
void dfs(int money,int index)
{
if(money==mon){
ans++; return;}
if(money>mon) return;
///从第index道菜开始选,例如有1 2 3 4 4道菜,1与2,3,4排列组合了,之后就不选1了,2与3,4排列组合
for(int i

这篇博客介绍了P1164问题的解决方案,包括使用深度优先搜索(DFS)结合剪枝策略以及动态规划(DP)的方法。状态转移方程涵盖三种情况:当钱足够、超过或不足购买第i道菜时。通过优化,将二维DP数组降维至一维,避免不必要的空间消耗。博客引用了洛谷用户Dream_zhc的优化思路。
最低0.47元/天 解锁文章
531

被折叠的 条评论
为什么被折叠?



