Plan Smarter.
Travel Boundless.
Experience hyper-optimized itineraries crafted by dynamic programming. Maximize your adventure, minimize your budget, and unlock the world.
Process
How It Works
From preferences to personalized itinerary in seconds — powered by dynamic programming.
Set Your Preferences
Choose your traveler profile, budget, number of cities, and preferred duration per destination.
Data Processing
We match available flights and hotels from the corporate travel dataset for your selected origin city.
DP Optimization
Our 0/1 Knapsack algorithm finds the optimal city combination that maximizes attractions within your budget.
Get Recommendations
View a personalized itinerary with full cost breakdown, flights, hotels, and attractions for each city.
Trip Planner
Find My Perfect Trip
Configure your travel preferences and let the DP algorithm find the best cities to visit.
Ready to Plan
Fill in your preferences and click "Find My Trip" to get optimized recommendations.
Under the Hood
The Algorithm
A 3-dimensional 0/1 Knapsack — choosing the optimal subset of cities to maximize attractions within budget and city count constraints.
🎒 The Travel Knapsack Problem
Each candidate city is modeled as a knapsack item. The weight is its total cost (flight + hotel × days), and the value is the number of attractions.
We have two constraints: the total spend must not exceed the budget, and we may visit at most K cities. The classic 2D knapsack becomes a 3D DP.
📐 State Definition
dp[i][k][w] = max attractions using:
- • first i candidate cities
- • visiting exactly k of them
- • total cost ≤ w × $50
Budget is scaled by $50 to reduce table size while keeping precision.
🔄 Recurrence Relation
dp[i][k][w] = max(
dp[i-1][k][w]// skip city i
dp[i-1][k-1][w-cost[i]] + value[i]// include city i
)
Base: dp[0][0][w] = 0 for all w
Invalid: dp[i][k][w] = -1 (infeasible)
💻 Pseudocode
ALGORITHM TravelDP(cities, budget, maxCities):
B ← budget / SCALE
dp[0..n][0..K][0..B] ← -∞
dp[0][0][0..B] ← 0 // base case
FOR i = 1 TO n:
cost ← ceil(cities[i].totalCost / SCALE)
value ← cities[i].attractions
FOR k = 0 TO K:
FOR w = 0 TO B:
dp[i][k][w] ← dp[i-1][k][w] // skip city i
IF k > 0 AND w ≥ cost:
dp[i][k][w] ← max(dp[i][k][w],
dp[i-1][k-1][w-cost] + value)
BACKTRACK to find selected cities
RETURN optimal city set⚡ Complexity Analysis
O(n × K × B)
- n = number of candidate cities (up to 14)
- K = max cities to visit
- B = budget ÷ $50 scale factor
O(n × K × B)
Reducible to O(K × B) with rolling array — we keep all layers for backtracking.
📊 Example DP Table
Simplified: 4 cities, K=2, budget units of $200
| k\w | $0 | $200 | $400 | $600 | $800 |
|---|---|---|---|---|---|
| k=0 | 0 | 0 | 0 | 0 | 0 |
| k=1 | — | 0 | 6 | 6 | 6 |
| k=2 | — | — | — | 12 | 12 |
Data Source
The Dataset
Based on the Argo Datathon 2019 — synthetic corporate travel data across Latin American and South American cities.
1,000+
Users
Corporate travelers with flight history
250,000+
Travel Records
Flight bookings across the dataset
15
Cities
Latin American & South American destinations
usersTraveler Profiles
| Code | Name | Gender | Age | Company |
|---|---|---|---|---|
| 0 | Carlos Silva | male | 34 | Argo Solutions |
| 1 | Ana Souza | female | 28 | TechCorp |
| 2 | Miguel Rodrigues | male | 42 | InnovateBR |
| 3 | Valentina García | female | 31 | GlobalCorp |
| 4 | Lucas Fernandes | male | 25 | StartupLab |
flightsSample Flight Routes
| From | To | Agency | Type | Price | Duration |
|---|---|---|---|---|---|
| São Paulo | Rio de Janeiro | FlyingDrops | economic | $134 | 0h 57m |
| Rio de Janeiro | São Paulo | FlyingDrops | economic | $134 | 0h 57m |
| São Paulo | Rio de Janeiro | Rainbow | economic | $128 | 0h 57m |
| Rio de Janeiro | São Paulo | Rainbow | economic | $128 | 0h 57m |
| São Paulo | Buenos Aires | FlyingDrops | economic | $368 | 2h 56m |
| Buenos Aires | São Paulo | FlyingDrops | economic | $368 | 2h 56m |
| São Paulo | Buenos Aires | Rainbow | economic | $350 | 2h 56m |
| Buenos Aires | São Paulo | Rainbow | economic | $350 | 2h 56m |
hotelsSample Hotels
| Code | Name | City | Price/Night |
|---|---|---|---|
| A | Hotel Unique SP | São Paulo (SP) | $180 |
| B | Hotel Ibis SP | São Paulo (SP) | $85 |
| C | Hotel Santa Teresa | Rio de Janeiro (RJ) | $220 |
| D | Hotel Ibis Rio | Rio de Janeiro (RJ) | $90 |
| E | Hotel Alvear Palace | Buenos Aires (ARG) | $210 |
| F | Hotel Ibis BA | Buenos Aires (ARG) | $75 |
| G | Hotel Casa Medina | Bogotá (COL) | $160 |
| H | Hotel Ibis Bogotá | Bogotá (COL) | $65 |
Argo Datathon 2019
This application uses a synthetic corporate travel dataset inspired by the Argo Datathon 2019 competition. The data represents anonymized business travel patterns across Latin American cities and is used purely for educational purposes.