洛谷题单指南-暴力枚举-P2089 烤鸡

原题链接:https://www.luogu.com.cn/problem/P2089

题意解读:枚举所有情况,记录符合美味程度要求的即可。

解题思路:

有两种枚举方法:循环枚举、DFS暴搜

很显然,循环枚举需要十重循环,代码过于丑陋,下面只介绍DFS的方法:

只需要一个大小为10的数组记录某一种调料组合,从第一种调料一直递归到超过十种,判断和是否和美味值相同,相同则找到一种方案,

然后计数、记录,最后输出结果。

100分代码:

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

int cnt; //方案数
int ans[60000][10]; //记录每种方案,因为一共10种调料,每种有1-3克三种放法,一共有3^10=59049种组合,约60000
int tmp[10]; //一种组合
int n;

void dfs(int k)
{
    if(k == 10)
    {
        int sum = 0;
        for(int i = 0; i < 10; i++) sum += tmp[i];
        if(sum == n)
        {
            for(int i = 0; i < 10; i++) ans[cnt][i] = tmp[i];
            cnt++;
        }
        
        return;
    }

    for(int i = 1; i <= 3; i++)
    {
        tmp[k] = i;
        dfs(k + 1);
    }
}

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

    cout << cnt << endl;
    for(int i = 0; i < cnt; i++)
    {
        for(int j = 0; j < 10; j++)
        {
            printf("%d ", ans[i][j]);
        }
        printf("\n");
    }
}

 

posted @ 2024-01-30 17:41  五月江城  阅读(36)  评论(0编辑  收藏  举报