P2089 烤鸡——暴力枚举
题目背景
猪猪 Hanke 得到了一只鸡。
题目描述
猪猪 Hanke 特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke 吃鸡很特别,为什么特别呢?因为他有 \(10\) 种配料(芥末、孜然等),每种配料可以放 \(1\) 到 \(3\) 克,任意烤鸡的美味程度为所有配料质量之和。
现在, Hanke 想要知道,如果给你一个美味程度 \(n\) ,请输出这 \(10\) 种配料的所有搭配方案。
输入格式
一个正整数 \(n\),表示美味程度。
输出格式
第一行,方案总数。
第二行至结束,\(10\) 个数,表示每种配料所放的质量,按字典序排列。
如果没有符合要求的方法,就只要在第一行输出一个 \(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\%\) 的数据,\(n \leq 5000\)。
题解
#include <bits/stdc++.h>
using namespace std;
vector<int> mycurrent(10);
vector<vector<int>> solutions;
void solution(vector<int> current,int index, int remain) {
if (index==10) {
if(remain==0) solutions.push_back(current);
return;
}
for (int i=1;i<=3;i++) {
if(remain-i>=0) {
current[index]=i;
solution(current,index+1,remain-i);
}
}
}
int main() {
int n;
cin>>n;
solution(mycurrent,0,n);
cout<<solutions.size()<<endl;
for(vector<int> s:solutions) {
for(int i:s) {
cout<<i<<" ";
}
cout<<endl;
}
}
浙公网安备 33010602011771号