Problem Summary

For each carrying capacity \(C\), let \(M(C,R)\) be the minimum number of security cards needed to get through \(R\) rooms. The final task is

$$\sum_{C=3}^{40} M(C,30).$$

The key is that the rooms form a one-dimensional transport problem: to solve room \(r\), we must first move enough cards one room deeper to solve the remaining \(r-1\) rooms.

Mathematical Approach

1) Base case.

With one room, we need one card to enter it and one more card to leave it, so

$$M(C,1)=2.$$

The code stores the shifted helper value

$$F_C(r)=M(C,r)-1,$$

so the base becomes

$$F_C(1)=1.$$

2) What must be transported one room inward.

Suppose we already know \(M(C,r-1)\). Then, to clear \(r\) rooms, we must first arrange that many cards inside the next room, because once we are there for the final time, the rest of the problem is exactly an \((r-1)\)-room instance.

So the transport target is

$$M(C,r-1)=F_C(r-1)+1.$$

3) Why one shuttle trip contributes only \(C-2\) net cards.

A shuttle trip means: move forward one room carrying up to \(C\) cards, leave some cards there, and come back to fetch more. A non-final round trip consumes

1) one card to go forward through the door,

2) one card to return through the same door.

Therefore a round trip can deposit at most

$$C-2$$

cards net in the deeper room.

4) Why the last trip is special.

On the last trip we do not come back, so that trip can deliver one extra card. If we make \(t\) forward trips in total, then the maximum number of cards accumulated one room deeper is

$$ (t-1)(C-2)+(C-1)=t(C-2)+1. $$

We need this to be at least \(M(C,r-1)\), hence

$$t(C-2)+1\ge M(C,r-1).$$

So the minimum number of forward trips is

$$t=\left\lceil\frac{M(C,r-1)-1}{C-2}\right\rceil=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil.$$

5) Total card cost of those trips.

Each of the first \(t-1\) trips is a full out-and-back shuttle, so it costs 2 door usages. The last trip is one-way, so it costs 1 door usage. Therefore transporting the needed stock one room deeper adds

$$2(t-1)+1=2t-1$$

cards to the requirement.

This gives the recurrence

$$M(C,r)=M(C,r-1)+2t-1,$$

with

$$t=\left\lceil\frac{M(C,r-1)-1}{C-2}\right\rceil.$$

6) Helper-form recurrence used in the code.

Since \(F_C(r)=M(C,r)-1\), the recurrence becomes

$$F_C(1)=1,$$

$$t_r=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil,$$

$$F_C(r)=F_C(r-1)+2t_r-1,$$

and finally

$$M(C,r)=F_C(r)+1.$$

The implementation writes the ceiling in the equivalent integer form

$$t_r=\left\lceil\frac{F_C(r-1)+C-3}{C-2}\right\rceil,$$

which avoids fractions.

7) Worked checkpoints.

The code verifies

$$M(3,6)=123,\qquad M(4,6)=23.$$

Hence

$$M(3,6)+M(4,6)=146,$$

and another checkpoint is

$$\sum_{C=3}^{10}M(C,10)=10382.$$

Algorithm

1) For a fixed \(C\), initialize \(F_C(1)=1\).

2) For \(r=2,3,\dots,R\), compute \(t_r\) and update \(F_C(r)\).

3) Recover \(M(C,R)=F_C(R)+1\).

4) Sum over all capacities \(C\) in the required range.

Complexity Analysis

For each \(C\), the recurrence has length \(R\), so the total cost is

$$O\bigl((C_{\max}-C_{\min}+1)R\bigr)$$

with only

$$O(1)$$

extra memory.

Checks And Final Result

The checkpoints are

$$M(3,6)=123,\qquad M(4,6)=23,\qquad \sum_{C=3}^{4}M(C,6)=146,$$

$$\sum_{C=3}^{10}M(C,10)=10382.$$

The final answer is

$$\sum_{C=3}^{40}M(C,30)=34315549139516.$$

Further Reading

  1. Problem page: https://projecteuler.net/problem=327
  2. Recurrence relations: https://en.wikipedia.org/wiki/Recurrence_relation
  3. Integer transport intuition: https://en.wikipedia.org/wiki/Integer_programming

Problemzusammenfassung

Fuer jede Kapazitaet \(C\) sei \(M(C,R)\) die minimale Anzahl von Sicherheitskarten zum Durchqueren von \(R\) Raeumen. Gesucht ist

$$\sum_{C=3}^{40}M(C,30).$$

Mathematischer Ansatz

1) Basisfall.

Bei einem Raum braucht man eine Karte zum Betreten und eine zum Verlassen, also

$$M(C,1)=2.$$

Mit der Hilfsgroesse

$$F_C(r)=M(C,r)-1$$

wird daraus

$$F_C(1)=1.$$

2) Was eine Ebene tiefer transportiert werden muss.

Um \(r\) Raeume zu loesen, muessen zunaechst \(M(C,r-1)\) Karten in den naechsten Raum gebracht werden. Danach ist der Rest genau wieder ein \((r-1)\)-Raum-Problem.

3) Netto uebertraegt ein Rundtrip nur \(C-2\).

Ein Hin-und-zurueck-Transport verbraucht eine Karte fuer die Vorwaertstuer und eine fuer die Rueckkehr. Deshalb koennen pro kompletter Shuttle-Runde netto hoechstens

$$C-2$$

Karten deponiert werden.

4) Die letzte Fahrt ist anders.

Die letzte Fahrt braucht keine Rueckkehr. Bei insgesamt \(t\) Vorwaertsfahrten lassen sich daher maximal

$$ (t-1)(C-2)+(C-1)=t(C-2)+1 $$

Karten in den tieferen Raum bringen. Also

$$t=\left\lceil\frac{M(C,r-1)-1}{C-2}\right\rceil=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil.$$

5) Rekurrenz.

Die ersten \(t-1\) Fahrten kosten je 2 Karten, die letzte kostet 1. Damit

$$M(C,r)=M(C,r-1)+2t-1.$$

In der Hilfsnotation:

$$F_C(1)=1,\qquad t_r=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil,\qquad F_C(r)=F_C(r-1)+2t_r-1.$$

Der Code schreibt die Deckenfunktion aequivalent als

$$t_r=\left\lceil\frac{F_C(r-1)+C-3}{C-2}\right\rceil.$$

6) Checkpoints.

Geprueft werden

$$M(3,6)=123,\qquad M(4,6)=23,\qquad M(3,6)+M(4,6)=146,$$

und ausserdem

$$\sum_{C=3}^{10}M(C,10)=10382.$$

Algorithmus

1) Fuer jedes \(C\): mit \(F_C(1)=1\) starten.

2) Bis \(r=R\) die Rekurrenz iterieren.

3) \(M(C,R)=F_C(R)+1\) bilden.

4) Ueber alle \(C\) summieren.

Komplexitaetsanalyse

Gesamtzeit

$$O((C_{\max}-C_{\min}+1)R),$$

Zusatzspeicher

$$O(1).$$

Kontrollen Und Endergebnis

Das Endergebnis ist

$$\sum_{C=3}^{40}M(C,30)=34315549139516.$$

Weiterfuehrende Hinweise

  1. Problem: https://projecteuler.net/problem=327
  2. Rekurrenzgleichungen: https://de.wikipedia.org/wiki/Rekursionsgleichung
  3. Ganzzahlige Optimierung: https://de.wikipedia.org/wiki/Ganzzahlige_Optimierung

Problem Özeti

Her tasima kapasitesi \(C\) icin, \(M(C,R)\) \(R\) odadan gecmek icin gereken minimum kart sayisi olsun. Nihai toplam

$$\sum_{C=3}^{40} M(C,30)$$

isteniyor.

Matematiksel Yaklaşım

1) Taban durum.

Tek oda varsa bir kart giris, bir kart cikis icin gerekir; yani

$$M(C,1)=2.$$

Kod, yardimci olarak

$$F_C(r)=M(C,r)-1$$

miktarini tutar. Boylece

$$F_C(1)=1$$

olur.

2) Bir oda derine ne tasinmali?

\(r\) odayi gecmek icin, once bir sonraki odanin icine \(M(C,r-1)\) kadar kart stoklamamiz gerekir. Cunku son kez odaya girdigimiz andan sonra geriye kalan is tam olarak \((r-1)\)-oda problemidir.

3) Neden bir shuttle turu net \(C-2\) kart birakir?

Tam bir ileri-geri turunda

1) ileri gecis icin 1 kart,

2) geri donus icin 1 kart

harcanir. Bu nedenle tam bir tur, derindeki odada net en fazla

$$C-2$$

kart birakabilir.

4) Son tur neden farkli?

Son turda geri donmeyiz. Toplam \(t\) ileri tur varsa, ilk \(t-1\) tanesi net \(C-2\), sonuncusu ise net \(C-1\) kart birakir. Yani toplam teslimat kapasitesi

$$ (t-1)(C-2)+(C-1)=t(C-2)+1 $$

olur. Bu miktar en az \(M(C,r-1)\) olmali, dolayisiyla

$$t=\left\lceil\frac{M(C,r-1)-1}{C-2}\right\rceil=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil.$$

5) Rekürans nasil cikar?

Ilk \(t-1\) shuttle turu 2'ser kart, son tur 1 kart tuketir. Bu nedenle toplam maliyet artisi

$$2(t-1)+1=2t-1$$

olur. Sonuc:

$$M(C,r)=M(C,r-1)+2t-1.$$

Yardimci formda ise

$$F_C(1)=1,$$

$$t_r=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil,$$

$$F_C(r)=F_C(r-1)+2t_r-1,$$

ve

$$M(C,r)=F_C(r)+1.$$

Koddaki

$$t_r=\left\lceil\frac{F_C(r-1)+C-3}{C-2}\right\rceil$$

yazimi bunun tamsayi-aritmetik esitidir.

6) Checkpoint'ler.

Kod su degerleri dogrular:

$$M(3,6)=123,\qquad M(4,6)=23,$$

dolayisiyla

$$M(3,6)+M(4,6)=146,$$

ve ayrica

$$\sum_{C=3}^{10}M(C,10)=10382.$$

Algoritma

1) Sabit \(C\) icin \(F_C(1)=1\) ile basla.

2) \(r=2\) den \(R\)'ye kadar reküransi uygula.

3) \(M(C,R)=F_C(R)+1\) bul.

4) Tum \(C\) degerleri uzerinden topla.

Karmaşıklık Analizi

Toplam zaman

$$O((C_{\max}-C_{\min}+1)R),$$

ek bellek ise

$$O(1)$$

kadardir.

Kontroller Ve Nihai Sonuc

Nihai cevap

$$\sum_{C=3}^{40}M(C,30)=34315549139516$$

olarak bulunur.

Ileri Okuma

  1. Problem metni: https://projecteuler.net/problem=327
  2. Rekürans bagintilari: https://tr.wikipedia.org/wiki/Rekürans_baginti
  3. Tamsayili optimizasyon: https://tr.wikipedia.org/wiki/Tamsayili_programlama

Resumen del Problema

Para cada capacidad \(C\), \(M(C,R)\) es el numero minimo de tarjetas para atravesar \(R\) salas. Debemos calcular

$$\sum_{C=3}^{40} M(C,30).$$

Enfoque Matematico

1) Caso base.

Con una sola sala hacen falta dos tarjetas, una para entrar y otra para salir:

$$M(C,1)=2.$$

El codigo usa

$$F_C(r)=M(C,r)-1,$$

de modo que

$$F_C(1)=1.$$

2) Que hay que transportar una sala mas adentro.

Para resolver \(r\) salas, primero hay que conseguir \(M(C,r-1)\) tarjetas dentro de la siguiente sala. A partir de ahi, el resto del problema es exactamente un caso de \(r-1\) salas.

3) Por que un viaje ida-vuelta deja solo \(C-2\) netas.

En un viaje completo se consume una tarjeta para avanzar y otra para volver. Por eso un viaje de ida-vuelta solo puede dejar neto

$$C-2$$

tarjetas en la sala interior.

4) El ultimo viaje no requiere regreso.

Si en total hacemos \(t\) viajes hacia delante, los primeros \(t-1\) dejan \(C-2\) cada uno y el ultimo deja \(C-1\). Por tanto la entrega maxima es

$$ (t-1)(C-2)+(C-1)=t(C-2)+1. $$

Esto debe ser al menos \(M(C,r-1)\), asi que

$$t=\left\lceil\frac{M(C,r-1)-1}{C-2}\right\rceil=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil.$$

5) Recurrencia.

Los primeros \(t-1\) viajes cuestan 2 tarjetas cada uno y el ultimo cuesta 1. Entonces

$$M(C,r)=M(C,r-1)+2t-1.$$

En la variable auxiliar:

$$F_C(1)=1,\qquad t_r=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil,\qquad F_C(r)=F_C(r-1)+2t_r-1.$$

6) Checkpoints.

Se comprueba

$$M(3,6)=123,\qquad M(4,6)=23,\qquad M(3,6)+M(4,6)=146,$$

y tambien

$$\sum_{C=3}^{10}M(C,10)=10382.$$

Algoritmo

1) Para cada \(C\), empezar con \(F_C(1)=1\).

2) Iterar la recurrencia hasta \(r=R\).

3) Recuperar \(M(C,R)=F_C(R)+1\).

4) Sumar sobre todo el rango de capacidades.

Complejidad

Tiempo total

$$O((C_{\max}-C_{\min}+1)R),$$

memoria

$$O(1).$$

Comprobaciones Y Resultado Final

El resultado final es

$$\sum_{C=3}^{40}M(C,30)=34315549139516.$$

Lecturas Adicionales

  1. Problema: https://projecteuler.net/problem=327
  2. Relaciones de recurrencia: https://es.wikipedia.org/wiki/Relación_de_recurrencia
  3. Optimizacion entera: https://es.wikipedia.org/wiki/Programación_entera

问题概述

对每个容量 \(C\),定义 \(M(C,R)\) 为通过 \(R\) 个房间所需的最少卡片数。题目要求

$$\sum_{C=3}^{40}M(C,30).$$

数学方法

1) 基础情形。

只有一个房间时,需要一张卡进入、一张卡离开,所以

$$M(C,1)=2.$$

代码使用辅助量

$$F_C(r)=M(C,r)-1,$$

因此

$$F_C(1)=1.$$

2) 需要向更深一层运送什么。

若要解决 \(r\) 个房间,首先必须把 \(M(C,r-1)\) 张卡预先运到下一间房里。因为最后一次进入那间房以后,剩下的问题就正好是一个 \((r-1)\)-房间问题。

3) 为什么一次往返只能净留下 \(C-2\) 张。

一次完整往返要消耗 1 张卡向前开门,再消耗 1 张卡返回。因此一次往返最多只能在更深的房间里净留下

$$C-2$$

张卡。

4) 最后一次前进不需要回来。

如果总共前进 \(t\) 次,那么前 \(t-1\) 次各净留 \(C-2\),最后一次净留 \(C-1\)。所以总共最多送达

$$ (t-1)(C-2)+(C-1)=t(C-2)+1. $$

这必须至少等于 \(M(C,r-1)\),于是

$$t=\left\lceil\frac{M(C,r-1)-1}{C-2}\right\rceil=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil.$$

5) 递推式。

前 \(t-1\) 次往返各耗 2 张卡,最后一次耗 1 张卡,所以

$$M(C,r)=M(C,r-1)+2t-1.$$

在辅助变量下可写成

$$F_C(1)=1,\qquad t_r=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil,\qquad F_C(r)=F_C(r-1)+2t_r-1.$$

6) 校验点。

代码验证

$$M(3,6)=123,\qquad M(4,6)=23,\qquad M(3,6)+M(4,6)=146,$$

以及

$$\sum_{C=3}^{10}M(C,10)=10382.$$

算法

1) 对每个 \(C\),初始化 \(F_C(1)=1\)。

2) 递推到 \(r=R\)。

3) 取 \(M(C,R)=F_C(R)+1\)。

4) 对所有 \(C\) 求和。

复杂度分析

总时间复杂度是

$$O((C_{\max}-C_{\min}+1)R),$$

额外空间是

$$O(1).$$

校验与最终结果

最终答案为

$$\sum_{C=3}^{40}M(C,30)=34315549139516.$$

延伸阅读

  1. 题目页面: https://projecteuler.net/problem=327
  2. 递推关系: https://zh.wikipedia.org/wiki/递推关系
  3. 整数规划: https://zh.wikipedia.org/wiki/整数规划

Краткое описание

Для каждой ёмкости \(C\) величина \(M(C,R)\) обозначает минимальное число карт, необходимое для прохождения \(R\) комнат. Требуется найти

$$\sum_{C=3}^{40}M(C,30).$$

Математический подход

1) База.

Для одной комнаты нужно 2 карты: одна на вход и одна на выход. Значит,

$$M(C,1)=2.$$

Код использует вспомогательную величину

$$F_C(r)=M(C,r)-1,$$

и потому

$$F_C(1)=1.$$

2) Что нужно перенести на одну комнату глубже.

Чтобы пройти \(r\) комнат, сначала надо доставить \(M(C,r-1)\) карт в следующую комнату. После окончательного входа туда остаётся ровно задача на \(r-1\) комнат.

3) Почему один челночный цикл даёт только \(C-2\) чистого переноса.

Полный цикл туда-обратно тратит 1 карту на вход и 1 карту на возврат. Поэтому за один такой цикл можно оставить глубже не более

$$C-2$$

карт.

4) Последний проход отличается.

В последнем проходе возвращаться не нужно. Если всего сделано \(t\) проходов вперёд, то первые \(t-1\) дают по \(C-2\), а последний даёт \(C-1\). Итого максимум

$$ (t-1)(C-2)+(C-1)=t(C-2)+1. $$

Это должно быть не меньше \(M(C,r-1)\), так что

$$t=\left\lceil\frac{M(C,r-1)-1}{C-2}\right\rceil=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil.$$

5) Рекурсия.

Первые \(t-1\) циклов стоят по 2 карты, последний стоит 1 карту. Отсюда

$$M(C,r)=M(C,r-1)+2t-1.$$

В форме, используемой кодом:

$$F_C(1)=1,\qquad t_r=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil,\qquad F_C(r)=F_C(r-1)+2t_r-1.$$

6) Контрольные значения.

Проверяются

$$M(3,6)=123,\qquad M(4,6)=23,\qquad M(3,6)+M(4,6)=146,$$

а также

$$\sum_{C=3}^{10}M(C,10)=10382.$$

Алгоритм

1) Для фиксированного \(C\) начать с \(F_C(1)=1\).

2) Итерировать рекурсию до \(r=R\).

3) Восстановить \(M(C,R)=F_C(R)+1\).

4) Просуммировать по всем \(C\).

Сложность

Общее время

$$O((C_{\max}-C_{\min}+1)R),$$

память

$$O(1).$$

Проверки И Финальный Результат

Итоговый ответ:

$$\sum_{C=3}^{40}M(C,30)=34315549139516.$$

Дополнительные материалы

  1. Условие: https://projecteuler.net/problem=327
  2. Рекуррентные соотношения: https://ru.wikipedia.org/wiki/Рекуррентное_соотношение
  3. Целочисленная оптимизация: https://ru.wikipedia.org/wiki/Целочисленное_программирование

ملخص المسألة

لكل سعة حمل \(C\)، نرمز بـ \(M(C,R)\) إلى أقل عدد من البطاقات اللازمة لاجتياز \(R\) غرف. المطلوب هو

$$\sum_{C=3}^{40}M(C,30).$$

المنهج الرياضي

1) الحالة الأساسية.

في حالة غرفة واحدة نحتاج بطاقة للدخول وبطاقة للخروج، لذلك

$$M(C,1)=2.$$

ويستخدم الكود المتغير المساعد

$$F_C(r)=M(C,r)-1,$$

ومن ثم

$$F_C(1)=1.$$

2) ما الذي يجب نقله إلى غرفة أعمق.

لكي نجتاز \(r\) غرف، يجب أولًا أن نوصل \(M(C,r-1)\) بطاقة إلى الغرفة التالية. بعد الدخول الأخير إليها، يبقى لدينا بالضبط مسألة من نوع \(r-1\) غرفة.

3) لماذا يترك الذهاب-والإياب صافي \(C-2\) فقط.

كل دورة كاملة ذهابًا وإيابًا تستهلك بطاقة للدخول وبطاقة للعودة. لذلك لا يمكن أن تترك صافيًا أكبر من

$$C-2$$

بطاقة في الغرفة الأعمق.

4) الرحلة الأخيرة مختلفة.

في الرحلة الأخيرة لا نعود. إذا كان لدينا \(t\) رحلات إلى الأمام، فإن أول \(t-1\) رحلات تترك \(C-2\) لكل واحدة، بينما الأخيرة تترك \(C-1\). لذا يكون الحد الأقصى الكلي المنقول

$$ (t-1)(C-2)+(C-1)=t(C-2)+1. $$

ويجب أن يكون هذا المقدار على الأقل \(M(C,r-1)\)، وبالتالي

$$t=\left\lceil\frac{M(C,r-1)-1}{C-2}\right\rceil=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil.$$

5) علاقة التراجع.

أول \(t-1\) رحلات تكلف 2 بطاقة لكل واحدة، والرحلة الأخيرة تكلف 1 بطاقة. إذن

$$M(C,r)=M(C,r-1)+2t-1.$$

وفي صيغة المتغير المساعد:

$$F_C(1)=1,\qquad t_r=\left\lceil\frac{F_C(r-1)}{C-2}\right\rceil,\qquad F_C(r)=F_C(r-1)+2t_r-1.$$

6) نقاط الفحص.

يتحقق البرنامج من

$$M(3,6)=123,\qquad M(4,6)=23,\qquad M(3,6)+M(4,6)=146,$$

وكذلك من

$$\sum_{C=3}^{10}M(C,10)=10382.$$

الخوارزمية

1) لكل \(C\)، نبدأ من \(F_C(1)=1\).

2) نكرر العلاقة حتى \(r=R\).

3) نستعيد \(M(C,R)=F_C(R)+1\).

4) نجمع على جميع قيم \(C\).

تحليل التعقيد

الزمن الكلي هو

$$O((C_{\max}-C_{\min}+1)R),$$

والذاكرة الإضافية

$$O(1).$$

التحققات والنتيجة النهائية

النتيجة النهائية هي

$$\sum_{C=3}^{40}M(C,30)=34315549139516.$$

مراجع إضافية

  1. صفحة المسألة: https://projecteuler.net/problem=327
  2. العلاقات التراجعية: https://ar.wikipedia.org/wiki/علاقة_تكرارية
  3. البرمجة الصحيحة: https://ar.wikipedia.org/wiki/برمجة_صحيحة