算法每日一题:P2089 烤鸡 -DFS练习

算法每日一题:P2089 烤鸡 -DFS练习_第1张图片

一个不甘平凡的普通人,日更算法学习和打卡,期待您的关注和认可,陪您一起学习打卡!!!
专栏:每日算法学习
个人主页:个人主页

算法分类:dfs练习
语言:java
题目来源:洛谷 P2089 烤鸡

文章目录

  • 烤鸡
    • 题目背景
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
  • 思路
  • 完整代码:
  • 结果

烤鸡

题目背景

猪猪 Hanke 得到了一只鸡。

题目描述

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

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

输入格式

一个正整数 n n n,表示美味程度。

输出格式

第一行,方案总数。

第二行至结束, 10 10 10 个数,表示每种配料所放的质量,按字典序排列。

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

样例 #1

样例输入 #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

提示

对于 100 % 100\% 100% 的数据, n ≤ 5000 n \leq 5000 n5000

思路

每种佐料有三种情况,所以总的情况不会超过3^10,我们枚举每一种情况,定义一个数组来每种方案内佐料的质量,定义一个sum来统计总重,作为回溯的条件,最后输出即可。

完整代码:

import java.util.Scanner;

public class Main {
	//方案数
	static int res;
	//存储
	static int count;
	static int arr[];
	static int hello[][] = new int [59050][11];
	static int N;
	public static void main(String[] args) {
		Scanner  s = new Scanner(System.in);
		N = s.nextInt();
		arr = new int [20];
		dfs(1,0);
		System.out.println(res);
		for(int i =1;i<=res;i++) {
			for(int j =1;j<=10;j++) {
				System.out.print(hello[i][j]+" ");
			}
			System.out.println();
		}
		
	}
	public static void dfs(int index,int sum) {
		if(sum>N) return;
		if(index>10) {
			if(sum ==N) {
				res++;
				for(int i=1;i<=10;i++) {
					hello[res][i] = arr[i];
				}
			}
			return ;
		}
		for(int i =1;i<=3;i++) {
			arr[index] = i;
			dfs(index+1, sum+i);
			arr[index] =0;
		}
	}
}

结果

算法每日一题:P2089 烤鸡 -DFS练习_第2张图片

感谢您的阅读,希望对您有所帮助。关注我,完成每日算法自律打卡,什么时候开始都不晚!!

你可能感兴趣的:(算法提炼,算法,深度优先,java,蓝桥杯,dfs)