码迷,mamicode.com
首页 > 其他好文 > 详细

6.2每日一题题解

时间:2020-06-02 11:35:35      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:money   and   sort   题解   http   one   dom   oid   const   

Linova and Kingdom

涉及知识点:

  • dfs

solution:

  • 题目给出的N只有18,所以我们可以想到采取爆搜的方法
  • 然后题目可以稍微剪枝一下
  • 1.如果花费比之前求得最小值要大,那么就不用继续向下搜了
  • 2.我们可以先放体重大的再放小的,这样可以减少搜索次数

std:

#include <bits/stdc++.h>

using namespace std;
const int N = 20;

int n,wight;
int ans=0x3f3f3f3f;
int w[N],car[N];

void dfs(int count,int money)
{
    if(money >= ans) return ;
    if(count == n+1) 
    {
        ans = min(ans,money);
        return ;
    }
    for (int i = 1 ; i <= money ; i ++ )
    {
        if(wight - car[i] >= w[count])
        {
            car[i] += w[count];
            dfs(count+1,money);
            car[i] -= w[count];
        }
    }
    car[money+1] = w[count];
    dfs(count+1,money+1);
    car[count+1] = 0;
}

int main()
{
    cin >> n >> wight;
    for (int i = 1 ; i <= n ; i ++ ) cin >> w[i];
    sort(w+1,w+n+1,greater<int>() );
    dfs(0,0);
    cout << ans << endl;
    return 0;
}

6.2每日一题题解

标签:money   and   sort   题解   http   one   dom   oid   const   

原文地址:https://www.cnblogs.com/QFNU-ACM/p/13029814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!