洛谷p2089
程序员文章站
2022-06-08 14:07:57
...
毫无疑问,又是一个dfs,不过这次要求将方案先输出,最后再输出方案个数,那我就要找个东西存我的方案,由于是10位的,且开始可能为3,那么就没办法用int数组来存了,我的话做了字符数组来存,由于3的10次方是5900多,即有5900多种搭配,所以我初始化了一个大小为100000的char数组,上代码。
#include <iostream>
#include <string>
using namespace std;
int ans[11] = { 0 };
int ways = 0;
char way[100000] = {0};
void dfs(int count,int leftSpice ) {//记录现在是第几个瓶子,还有余下多少香料
if (count == 10) {//当第十个瓶,将余下的香料放进瓶子里,结束
ans[count] = leftSpice;
for (int i = 0; i < 10; i++)
{
way[10 * ways + i] = ans[i+1];
}
ways++;
return;
}
for (int i = 1; i <= 3; i++)
{
if (leftSpice-i < 10 - count) {//投入香料后,后面的的连每样1克都不够,剪枝
break;
}
if (leftSpice - i > (10 - count) * 3) {//投入香料后,后面每样3克还有多的,剪枝
continue;
}
ans[count] = i;//记录投放的克数。
dfs(count + 1, leftSpice - i);
}
}
int main() {
int n;//输入美味程度
cin >> n;
if (n < 10 || n>30) {
cout << 0 << endl;
return 0;
}
dfs(1, n);
cout << ways << endl;
int j = 0;
while (ways--) {
for (int i = 0+j; i < 10+j; i++) {
cout << (int)way[i] << " ";
}
cout << endl;
j += 10;
}
return 0;
}
有疑问,欢迎评论问我!告辞!
上一篇: 详细解读MySQL中的权限_MySQL