0

配列が与えられた場合、配列 = [ 1,2,3] としましょう

そのパワーセットの各セットのすべての製品の値を見つけたいです。

例えば、

パワーセットは

{null}
{1} - 1
{2} - 2
{3} - 3
{1,2}- 2
{2,3}- 6
{1,3}- 3
{1,2,3}- 6

表記法: set の後に set 内の値の積が続く

動的計画法を使用してこれを達成するにはどうすればよいですか。

ノート:

私はこの方法を試し、パワーセットを見つけました

void printPowerSet(int *set, int set_size)
{
    /*set_size of power set of a set with set_size
      n is (2**n -1)*/
    unsigned int pow_set_size = pow(2, set_size);
    int counter, j;

    /*Run from counter 000..0 to 111..1*/
    for(counter = 0; counter < pow_set_size; counter++)
    {

     int product=1;
      for(j = 0; j < set_size; j++)
       {
          /* Check if jth bit in the counter is set
             If set then pront jth element from set */
          if(counter & (1<<j))
           product *= counter;
       }
      printf("%d", product);
    }
}

この手法はまったく問題なく機能しますが、小さな配列の場合 (配列サイズ < 32)

4

1 に答える 1