洛谷 P1460 Healthy Holsteins DFS

P1460 Healthy Holsteins

在这里插入图片描述

code

/*SiberianSquirrel*/
/*CuteKiloFish*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const double PI = acos(-1), eps = 1e-8;
/*const int MOD = 998244353, r = 119, k = 23, g = 3;
const int MOD = 1004535809, r = 479, k = 21, g = 3;*/
const int INF = 0x3f3f3f3f, MOD = 1e9 + 7;
const int M = 3e2 + 10, N = 5e6 + 10;
int sgn(double x) {
    if(fabs(x) < eps) return 0;
    return x < 0? -1: 1;
}
//inline int rnd(){static int seed=2333;return seed=(((seed*666666ll+20050818)%998244353)^1000000007)%1004535809;}
//double Rand() {return (double)rand() / RAND_MAX;}

int n, k, v[M], t[M], last[M];
int a[M][M], up = M;

ll quick_pow(ll ans, ll p, ll res = 1) {
    for(; p; p >>= 1, ans = ans * ans % MOD)
        if(p & 1) res = res * ans % MOD;
    return res % MOD;
}

void init() {}

bool check(int x) {
    for(int i = 1; i <= n; ++ i) {
        int ans = 0;
        for(int j = 1; j <= x; ++ j) {
            ans += a[t[j]][i];
        }
        if(ans < v[i]) return false;
    }
    return true;
}

void dfs(int pos, int m) {
    if(pos > k) {
        if(check(m) && m < up) {
            up = m;
            for(int i = 1; i <= up; ++ i) {
                last[i] = t[i];
            }
        }
        return;
    }
    t[m + 1] = pos;
    dfs(pos + 1, m + 1);
    dfs(pos + 1, m);
}

void solve(ll res = 0) {
    dfs(1, 0);
    cout << up << ' ';
    for(int i = 1; i <= up; ++ i) {
        cout << last[i] << ' ';
    }
    cout << endl;
}


int main() {
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(nullptr);
// srand(time(0));
#ifdef ACM_LOCAL
    freopen("input", "r", stdin);
    freopen("output", "w", stdout);
#endif
    init();
    int o = 1;
//	cin >> o;
    while(o --) {
        cin >> n;
        for(int i = 1; i <= n; ++ i) cin >> v[i];
        cin >> k;
        for(int i = 1; i <= k; ++ i) {
            for(int j = 1; j <= n; ++ j)
            cin >> a[i][j];
        }
        solve();
    }
    return 0;
}

题目描述

农民 John 以拥有世界上最健康的奶牛为傲。他知道每种饲料中所包含的牛所需的最低的维他命量是多少。请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少。

给出牛所需的最低的维他命量,输出喂给牛需要哪些种类的饲料,且所需的饲料剂量最少。

维他命量以整数表示,每种饲料最多只能对牛使用一次,数据保证存在解。
输入格式

第一行一个整数 vvv,表示需要的维他命的种类数。
第二行 vvv 个整数,表示牛每天需要的每种维他命的最小量。

第三行一个整数 ggg,表示可用来喂牛的饲料的种数。
下面 ggg 行,第 nnn 行表示编号为 nnn 饲料包含的各种维他命的量的多少。
输出格式

输出文件只有一行,包括牛必需的最小的饲料种数 ppp;后面有 ppp 个数,表示所选择的饲料编号(按从小到大排列)。

如果有多个解,输出饲料序号最小的(即字典序最小)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值