P2089 烤鸡

题目描述

猪猪Hanke特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke吃鸡很特别,为什么特别呢?因为他有10种配料(芥末、孜然等),每种配料可以放1—3克,任意烤鸡的美味程度为所有配料质量之和

现在,Hanke想要知道,如果给你一个美味程度,请输出这10种配料的所有搭配方案

输入输出格式

输入格式:

一行,n<=5000

输出格式:

第一行,方案总数

第二行至结束,10个数,表示每种配料所放的质量

按字典序排列。

如果没有符合要求的方法,就只要在第一行输出一个“0”

输入输出样例

输入样例#1: 复制
11
输出样例#1: 复制
10
1 1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 1 2 1
1 1 1 1 1 1 1 2 1 1
1 1 1 1 1 1 2 1 1 1
1 1 1 1 1 2 1 1 1 1
1 1 1 1 2 1 1 1 1 1
1 1 1 2 1 1 1 1 1 1
1 1 2 1 1 1 1 1 1 1
1 2 1 1 1 1 1 1 1 1
2 1 1 1 1 1 1 1 1 1

Thinking : 对于我这种假OJer,其实一直是在学习相关的知识,动手写的话真的连递归也很少,因为完全不知道怎么写递归,所以这次算一个小小的进步吧。对了,我们这周是期中考试周,15号我们就考完了,昨天去爬山了,下午晚上全部用来在Linux上配置Hadoop和Java,我死的时候一定要给我烧一个装有Ubuntu 16.04 ISO 的Kingston 16G U盘,祭奠我对Linux无法言喻的爱,口亨!
#include<iostream>
#include<cstdio>
using namespace std;

int a[10];
int n, sum;

void solve(int k) {
    if (k == 10) {
        int ans = 0;
        for (int j = 0; j < 10; j++) {
            ans += a[j];
        }
        if (ans == n) {
            sum++;
        }
        return;
    }
    for (int i = 1; i <= 3; i++) {
        a[k] = i;
        solve(k + 1);
    }
}

void NEWsolve(int k) {
    if (k == 10) {
        int ans = 0;
        for (int j = 0; j < 10; j++) {
            ans += a[j];
        }
        if (ans == n) {
            for (int i = 0; i < 10; i++)
                printf("%d ", a[i]);
            printf("\n");
        }
        return;
    }
    for (int i = 1; i <= 3; i++) {
        a[k] = i;
        NEWsolve(k + 1);
    }
}

int main() {
    scanf("%d", &n);
    if (n <= 0 || n > 30)
        printf("0");
    else {
        //因为要先打印总次数,在打印所有可能,所以我递归了两次,而且这题暴力枚举也可以,就是10重循环,有兴趣的自己可以体验一下。我向大佬献上膝盖就好。
        solve(0);
        cout << sum << endl;
        NEWsolve(0);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值