• P3040 [USACO12JAN]贝尔分享Bale Share


    想了一个二分 + 状压的思路, 嫌太麻烦了, 直接一个dfs + 最优性剪枝水了过去.
    貌似比某些dp还快?

    #include <cstdio>
    #include <cstring>
    #include <cassert>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int MAXN = 20 + 2;
    inline int read(){
        char ch = getchar(); int x = 0;
        while(!isdigit(ch)) ch = getchar();
        while(isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
        return x;
    }
    
    int N;
    int s[MAXN], sum;
    
    int ans = (1 << 30);
    void dfs(int u, int suma, int sumb, int sumc) {
        if(u == N + 1) return ans = min(ans, max(suma, max(sumb, sumc))), void();
        if(suma + s[u] < ans) dfs(u + 1, suma + s[u], sumb, sumc);
        if(sumb + s[u] < ans) dfs(u + 1, suma, sumb + s[u], sumc);
        if(sumc + s[u] < ans) dfs(u + 1, suma, sumb, sumc + s[u]);
        return ;
    }
    
    int main(){
        cin>>N;
        for(int i = 1; i <= N; i++) sum += (s[i] = read());
        sort(s + 1, s + N + 1, greater<int>());
        dfs(1, 0, 0, 0);
        printf("%d
    ", ans);
        return 0;
    }
    
  • 相关阅读:
    C#函数参数前的修饰符
    C#正则表达式简单案例解析
    C#正则表达式
    C#反射Reflection
    C#事件
    C#委托的使用
    无法解析主机报错
    SparkStreaming对接rabbitMQ
    load文件到hive,并保存
    kafka模式对比
  • 原文地址:https://www.cnblogs.com/wsmrxc/p/9829253.html
Copyright © 2020-2023  润新知