luogu: P2089 烤鸡

题目一:

代码思路:

1、运用全排列模版代码把所有可能性都选出来,一个一个判断。

2、这里主要讲一个优化(代码里有部分没写,但依旧可以过,只是提一下):

        根据题意10种配料每种最多放三克,那么判断美味指数如果大于30就直接输出0就好了

        在递归种如果当前这个搭配的美味指数已经大于目标的美味指数就直接结束当前递归,表示结束了此种方案的继续搭配

        这道题还有一个要先打印出搭配种数,就是要用一个数组把可能性存下来,要不然调用两次递归就会超时。

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

int n;
int a[100],k[100000][10];
int t_sum = 0;

void f2(int pos,int t){
	if(t == 10){
		if(pos == n) {
			for(int i = 0; i < 10; i++) k[t_sum][i] = a[i];
			t_sum++;
		}
		return;
	}
	else if (pos>=n);
	for(int i = 1; i <= 3; i++){
		a[t] = i;
		if(pos + i <= n){
			f2(pos+i,t+1); 
		}
	}
}

int main(){
	cin >> n;
	f2(0,0);
	cout << t_sum << endl;
	for(int i = 0; i < t_sum; i++){
		for(int j = 0; j < 10; j++ ) cout << k[i][j] << " ";
		cout << endl;
	}
	return 0;
} 
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值