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

Автор Hi4ko, 12 лет назад, По-русски

Условие: http://acm.timus.ru/problem.aspx?space=1&num=1353

мой код с дп даёт WA #11

как нужно тогда правильно её решать?

Или дайте какую-нибудь подсказку :)

Спасибо  Petruchcho за помощь)

Задаем матрицу d[i][j], где i это само число, а j-кол-во цифр. Ответом будет d[n][9]. Если мы хотим получить d[i][j], мы суммируем всевозможные варианты первой цифры k числа i для j цифр. Тогда очевидно, что количество вариантов для d[i][j] будет сумма вариантов d[i-k][j-1], так как мы рассматриваем число вариантов для числа, меньшего на k и в котором на одну цифру меньше.



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

»
12 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
Может и глупость, но можно отправить массив констант!))
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    мне уже предлагали)
    я хочу именно с дп :)
    я его  тренирую)
»
12 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

Лень с вашим кодом ковыряться =) Вот  мой, если что.

Пусть f[i][j] - число способов представить сумму i, из j слагаемых, каждое из которых меньше либо равно девяти.

13 и 14 строчка инициализирует массив для случая, когда у нас сумма нулевая либо только одно слагаемое.
А дальше до n заполняется такой динамикой - мы подбираем нашу последнюю цифру (переменная k в 16 строчке), и просто к f[i][j] прибавляем число f[i-k][j-1] - то есть число способов набрать сумму i-k из j-1 слагаемого.
  • »
    »
    12 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Влад, ты как всегда крут, но просили натолкнуть в идеи, а не кидать решение!

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится
      И тебе привет) Да там букоф много. Опечатка будет какая-нибудь наверное, вряд ли полностью неверное решение прошло бы 10 тестов.
      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        кстати, как район написал?
        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
          Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

          Это блог, а не чат)

          Почти 100%, условия хз кто составлял, одну задачу по-разному понять можно было, 2 теста упало, потому что я делал не то, что нужно. 
          Upd. Всё, не надо тут флудить.
          • »
            »
            »
            »
            »
            »
            12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            кинешь условия олимпы и если можешь тесты?
»
12 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
http://ideone.com/5dGjF
такое запихал)))

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

    Хитро. А я такое:
    http://pastebin.com/V0Gtz6kC

    Забавный факт - сдалось это только после замены
    if(prec[j] == a)
         ans++;
    на
    ans += (prec[j] == a);
    Это ускорило программу как минимум на 250 мс. Не думал, что это может быть настолько важно.

»
12 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится
Задаем матрицу d[i][j], где i это само число, а j-кол-во цифр. Ответом будет d[n][9]. Если мы хотим получить d[i][j], мы суммируем всевозможные варианты первой цифры k числа i для j цифр. Тогда очевидно, что количество вариантов для d[i][j] будет сумма вариантов d[i-k][j-1], так как мы рассматриваем число вариантов для числа, меньшего на k и в котором на одну цифру меньше.
»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Let F[i][s] is the amount of number with i digits whose sum is s. F[i][s] = sum(F[i-1][s-k]) with k=0...9.