洛谷OJ-P2089 烤鸡

题目描述


解析:本题可以使用深搜DFS的方法。每次选配料时有3种选择方式,撒1克,2克,3克。


因为配料数已知,为10种,所以为了简化题目,我将输入的总配料减10克,将方式改为撒0克,1克,2克。(其实是一样的。。)

需要注意的是,本题还要求输出每个方法配料的具体情况。所以选用vec数组来保存,在DFS过程中传递上一个数组的拷贝
最后将结果保存到res二维数组中。

代码如下

#include <bits/stdc++.h>
using namespace std;
//存放每种方法的配料详情
vector<vector<int>> res;
vector<int> vec(10,1);
//n为需要放置的配料总重
int n;
int total = 0;

void dfs(int pos , int sum, int si, vector<int> v)
{
    if(si == 1) v[pos-1]++;
    if(si == 2) v[pos-1]+=2;
    if(sum == n)
    {
        total ++;
        res.push_back(v);
        return ;
    }
    if(sum > n || pos == 10) return ;
    dfs(pos+1,sum,0,v);
    dfs(pos+1,sum+1,1,v);
    dfs(pos+1,sum+2,2,v);
}

int main()
{
    int nn;
    cin>>nn;
    n = nn - 10;
    dfs(0,0,0,vec);
    cout<<total<<endl;
    for(int i = 0; i < res.size() ; i++)
    {
        for(int j = 0 ; j < 9 ; j++)
        {
            cout<<res[i][j]<<" ";
        }
        cout<<res[i][9]<<endl;
    }
    return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。