---
title: 6D 傷心水族箱
tags: solution
---
# D. 傷心水族箱
```cpp=
# include <iostream>
# include <vector>
# include <algorithm>
using namespace std ;
vector<int> sati ;
vector<int> cost ;
int maxS = 0 ;
int maxC = 0 ;
int test ;
void track( int n, int s, int c ) {
if ( c > maxC ) return ; //超過最大金額 回上一層
if ( n == test ) { // 所有的物品都檢查過了
if ( s > maxS ) maxS = s ;
return ;
}
// 購買這個飼料
track( n + 1, s + sati[n], c + cost[n] ) ;
// 沒買這個飼料
track( n + 1, s, c ) ;
}
int main () {
int temp ;
int s = 0, c = 0 ;
cin >> maxC >> test ;
vector<int> path(test) ;
for ( int i = 0 ; i < test ; i ++ ) {
cin >> temp ;
cost.push_back(temp) ;
cin >> temp ;
sati.push_back(temp) ;
}
track( 0, 0, 0 ) ;
cout << maxS << endl ;
}
```
不過此類「背包問題」利用遞迴處理並不是最佳方案,
之後會和各位詳細介紹背包問題之各類解法。