第三题用了dfs也行,第一题想不出来。。我以为是dp,做对2道应该有面试机会吧。。。

#include<bits/stdc++.h>

using namespace std;

unsigned long long arr1[100]; // 武力
int arr2[100]; // 金币
int n;
int ans = 0x7fffff;

void dfs(int i, int cur, unsigned long long a) {
    if(cur >= ans) return;
    if(i==n) {
        ans = min(ans, cur);
        return ;
    }
    if(a < arr1[i]) {
        dfs(i+1, cur+arr2[i], a+arr1[i]);
    } else {
        dfs(i+1, cur+arr2[i], a+arr1[i]);
        dfs(i+1, cur, a);
    }
}
int main() {
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>arr1[i];
    for(int i=0;i<n;i++)
        cin>>arr2[i];
    dfs(0, 0, 0);
    cout << ans << endl;
}