题解 | #iko和她的糖#

iko和她的糖

https://ac.nowcoder.com/acm/problem/15891

考察知识点:递归

递归求解:

  • 当补给次数超过 3 次或当前糖果数量小于 0 时,返回。
  • 当当前位置超过 n 时,更新答案并返回。

时间复杂度O(2n)O(2^n) + 剪枝

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vpii;
typedef vector<pll> vpll;

#define N 1005
int a[N], b[N], ans = 0, n;
bool flag = true;

void dfs(int pos, int tang, int k)  // pos: 当前位置,tang: 当前糖果数量,k: 补给次数
{
    if (k > 3)
        return;
    else if (tang < 0)
        return;
    else if (pos > n)
    {
        flag = false;
        ans = max(ans, tang);
        return;
    }
    dfs(pos + 1, tang + a[pos] - b[pos], k + 1);
    dfs(pos + 1, tang - b[pos], k);
}

void solve()
{
    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    for (int i = 1; i < n; ++i)
        cin >> b[i];
    dfs(1, 0, 0);
    if (flag)
        cout << -1 << endl;
    else
        cout << ans << endl;
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t = 1;
    // cin >> t;
    while (t--)
        solve();
    return 0;
}
全部评论

相关推荐

01-30 09:45
燕山大学 Java
喵_coding:这种直接跑就完事了 哪有毕业了才签合同 任何offer和三方都没有的
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务