(水题)洛谷 - P2089 - 烤鸡

本文深入解析洛谷题目P2089的解决方案,采用暴力深度优先搜索(DFS)策略,探讨了如何通过递归实现对所有可能情况的遍历。文章详细展示了代码实现过程,包括剪枝条件的应用,以避免不必要的计算,同时讨论了大于序与字典序的关系,为读者提供了全面的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://www.luogu.org/problemnew/show/P2089

非常暴力的dfs,不知道不剪枝会怎么样,但是其实最多也就 $3^{10}$ ,大不到哪里去。还有一个细节就是大于序并不是字典序的逆序……233这样都没发现我是服了。

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

int n;

set<ll> ans;

void dfs(int i,int c,int res,ll sum){
    res-=c;
    sum=sum*10+c;
    if(res<0)
        return;
    if((10-i)>res||(10-i)*3<res)
        return;
    if(i==10){
        if(res!=0)
            return;
        else{
            ans.insert(sum);
        }
    }
    else{
        dfs(i+1,1,res,sum);
        dfs(i+1,2,res,sum);
        dfs(i+1,3,res,sum);
    }
}

int main(){
    scanf("%d",&n);
    dfs(1,1,n,0);
    dfs(1,2,n,0);
    dfs(1,3,n,0);

    printf("%d\n",ans.size());
    for(auto i:ans){
        //cout<<i<<endl;;
        ll t=i;

        stack<int> s;
        while(t){
            s.push(t%10);
            t/=10;
        }

        while(!s.empty()){
            printf("%d",s.top());
            s.pop();
            if(s.empty())
                printf("\n");
            else
                printf(" ");
        }
    }
}

 

转载于:https://www.cnblogs.com/Yinku/p/10316071.html

### 关于洛谷 P2089 烤鸡的解思路 该目属于模拟类问,主要考察对循环结构以及条件判断的理解和应用能力。以下是针对此问的具体分析解决方案。 #### 目解析 烤鸡是关于烹饪时间计算的一个简单模拟问。输入数据包括鸡肉的数量 `n` 和每只鸡所需的最小烹饪时间数组 `t[i]`。目标是找到完成所有鸡肉烹饪所需要的最短总时间。由于每次最多能同时烤两只鸡,因此需要合理安排顺序来减少总的等待时间[^1]。 #### 思路说明 为了求得最优解法,可以采用贪心算法的思想: - 将所有的烹饪时间按照从小到大排序; - 使用两个变量分别记录当前正在使用的两根铁签上的剩余时间和已完成的时间; - 对于每一个新的鸡肉块,总是优先分配给最早能够腾出来的那根铁签上;如果两根都忙,则需等到其中一根空闲后再继续处理新任务。 这种策略确保了任何时刻只要有可用资源就会立即投入使用,从而达到全局效率最大化的目的。 #### Python 实现代码 下面提供了一个基于上述逻辑编写的Python程序: ```python def min_cooking_time(n, times): # 初始化两根铁签的状态 stick1 = 0 stick2 = 0 # 排序以便按顺序取用 times.sort() total_time = 0 for i in range(n): if stick1 <= stick2: # 如果stick1先结束或者两者同时结束 stick1 += times[i] current_max = stick1 else: stick2 += times[i] current_max = stick2 # 更新最大值作为最终结果的一部分 if current_max > total_time: total_time = current_max return total_time # 输入部分可以根据实际情况调整 if __name__ == "__main__": n = int(input()) t = list(map(int, input().split())) result = min_cooking_time(n, t) print(result) ``` 以上代码实现了基本的功能需求,并通过合理的变量命名提高了可读性和维护性。 #### 注意事项 在实际提交之前还需要注意一些边界情况测试,比如当只有一个物品时是否正常工作等问。另外也要确认平台对于输出格式是否有特殊规定等细节之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值