【牛客算法周周练8】


A-小A买彩票



AC代码

#include <iostream>
#include <algorithm>
#include <utility>
#include <queue>
using namespace std;
typedef long long ll;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//代码预处理区

const int MAX = 1e5 + 5e4 + 7;
ll dp[37][127];//dp[买奖次数][得到的奖金数量] = 方案数
//全局变量区

ll gcd(ll a, ll b) { return b ? gcd(b, a % b): a; }
//函数预定义区

int main() {
    IOS;
    int n; cin >> n;
    dp[0][0] = 1;
    for (int i = 1; i <= n; i++)
        for (int j = i; j <= 4 * i; j++)
            for (int k = 1; k <= 4; k++)
                if (j >= k) dp[i][j] += dp[i - 1][j - k];

    ll down = 1ll << 2 * n;//总数:4^n
    ll up = 0;
    for (int i = 3 * n; i <= 4 * n; i++) 
        up += dp[n][i];
    ll factor = gcd(up, down);
    cout << up / factor << "/" << down / factor << endl;
    return 0;
}
//函数区


B-「金」点石成金



AC代码

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//代码预处理区

const int MAX = 17;
struct Node {
    int a, b, c, d;
} info[MAX];
int n; 
//全局变量区

ll dfs(int pos, ll money, ll magic);
//函数预定义区

int main() {
    IOS;
    cin >> n;
    for (int i = 1; i <= n; i++) 
        cin >> info[i].a >> info[i].b >> info[i].c >> info[i].d;
    ll ans = dfs(1, 0, 0);
    cout << ans << endl;
    return 0;
}
ll dfs(int pos, ll money, ll magic) {
    if (pos > n) return money * magic;
    int t1 = money + info[pos].a;
    int t2 = magic - info[pos].b;
    if (t2 < 0) t2 = 0;
    ll res1 = dfs(pos + 1, t1, t2);
    t1 = money - info[pos].d;
    t2 = magic + info[pos].c;
    if (t1 < 0) t1 = 0;
    ll res2 = dfs(pos + 1, t1, t2);
    return max(res1, res2);
}
//函数区


C-小阳的贝壳

由于本人过菜,还没有补上来,请见谅


AC代码



D-Forsaken喜欢字符串

由于本人过菜,还没有补上来,请见谅


AC代码



E-Board

由于本人过菜,还没有补上来,请见谅


AC代码


比赛 文章被收录于专栏

憨憨的专栏

全部评论
坐等看大佬解析
点赞 回复 分享
发布于 2020-05-30 12:08

相关推荐

点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务