Пожалуйста, прочтите новое правило об ограничении использования AI-инструментов. ×

Блог пользователя debugger2017

Автор debugger2017, история, 8 лет назад, По-английски

Given an array, find the number of increasing sub-sequences having GCD=1 Example: A={1, 2, 3} Output: 5 The increasing sub-sequences are {1},{1,2},{1,2,3},{1,3},{2,3} The only approach I can think is to try all the possible sub-sequences and calculate their GCD.

  • Проголосовать: нравится
  • -16
  • Проголосовать: не нравится

»
8 лет назад, # |
Rev. 3   Проголосовать: нравится +21 Проголосовать: не нравится

UPD: contest is over, if you know how to solve this task, I'd like to know either.

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    This problem was earlier discussed in another blog 1-2 weeks back on CF.

  • »
    »
    8 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +17 Проголосовать: не нравится

    Constraints were small, so dpij = number of LIS ending at i with GCD j.

    • »
      »
      »
      8 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Things will be more clear with a recurrence.

      • »
        »
        »
        »
        8 лет назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится
        for(int i=0;i<n;i++)
        {
        	for(int j=i-1;j>=0;j--)
        	{
        	 	if(a[i]>a[j])
        		{
        	 		for(int k=1;k<=100;k++)
        			{
        			 	dp[i][gcd(a[i],k)]+=dp[j][k];
        			}
        		}
        	}
        }
        
        before this , you must set base values for all i, where dp[i][a[i]]=1;