羅区-P2089チキン
元の質問へのリンク:https://www.luogu.com.cn/problem/P2089
トピックの背景
豚ハンケは鶏を得ました。
タイトル説明
豚ハンケ特にローストチキンを食べるのが好き(これは同じ獣はfratricidal、です!)ハンケ鶏は非常に特別である。なぜ特別な?彼は10の成分(マスタード、クミンなど)を持っているので、各成分1-3グラム、食材や品質のすべてのための任意のおいしいローストチキンの範囲を置くことができます。
あなたがおいしい次数n、これらの10個の成分と、すべてのプログラムの出力を与えれば今、ハンケは、知りたいです。
入力形式
正の整数n、繊細度。
出力フォーマット
最初の行、プログラムの合計数。
2行目の末尾に、数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
説明/ヒント
データの100%、n≤5000します。
C ++コード
#include <iostream>
using namespace std;
int n,len,d[10],ans[59049][10];
void dfs(int k, int m) {
if(k==10) {
if(m==n) {
for(int i=0;i<10;++i)
ans[len][i]=d[i];
++len;
}
return ;
}
for(int i=1;i<=3;++i)
{
if(m+i>n)
break;
d[k]=i;
dfs(k+1,m+i);
}
}
int main() {
cin>>n;
if(n<10||n>30) {
cout<<0<<endl;
return 0;
}
dfs(0,0);
cout<<len<<endl;
for(int i=0;i<len;++i)
{
for(int j=0;j<10;++j)
cout<<ans[i][j]<<' ';
cout<<endl;
}
return 0;
}