羅区-P2089チキン

羅区-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;
}

おすすめ

転載: www.cnblogs.com/yuzec/p/12652700.html