1、简单做的是节日礼物简单模拟即可,代码如下   100%#include <bits/stdc++.h>using namespace std;int main(){    string s;    vector<int> v;    while(cin >> s){        auto n = stoi(s);        v.push_back(n);        char c = cin.get();        if (c == '\n') {            break;          }    }    int mn = 1e9;    for(int i = 0;i < v.size(); i++){        int sum = 0;        for(int j = 0;j < v.size(); j++){            if(v[j] >= v[i]) sum += v[j] - v[i];            else sum += v[j];        }        mn = min(mn,sum);    }    cout << mn << endl;    return 0;}2、中等做的是bug题   100%dfs即可代码如下:#include <iostream>using namespace std;void dfs(int n,int t,int &mn){    if(t > mn) return;    if(n == 1){        mn = min(mn,t + 1);        return;    }    if(n) dfs(n - 1,t + 1,mn);    if(n%2 == 0) dfs(n/2,t + 1,mn);    if(n%3 == 0) dfs(n/3,t + 1,mn);}int main() {    int n;    cin >> n;    int mn = 1e9;    dfs(n,0,mn);    cout << mn << endl;    return 0;}3、难题做的是求方案数量   全部通过得分0%使用了位运算:感觉这题提交有bug,不管提交什么都是用例通过,得分0%,按理说复杂度有点高也只是超时。代码如下:#include <bits/stdc++.h>using namespace std;int main() {    int n,m,l;    cin >> n >> m >> l;    vector<int> g(l),p(l);    for(int i = 0;i < l; i++) scanf("%d",&g[i]);    for(int i = 0;i < l; i++) scanf("%d",&p[i]);    int a = pow(2,l),res = 0;    for(int i = 1; i < a; i++) {        int now = 0,x = 0;        for(int j = 0;j < l; j++) if(i >> j & 1) x += g[j],now += p[j];        if(x <= n && now >= m) {            res++;        }    }    cout << res << endl;    return 0;}
点赞 5
评论 3
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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