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

hdu3448Bag Problem 暴力枚举

时间:2015-07-27 21:06:54      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:暴力

//给k个数,问最多取n个,所取的数的和不大于m的最大的和
//暴力枚举所有情况
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std ;
const int maxn = 110 ;
typedef int ll;
ll ans = 0 ;
ll a[maxn] ;
ll n , m ;
int k ;
void dfs(int pos , int num , int  sum)
{
    ans = max(ans ,sum) ;
    if(pos == k + 1)return ;
    dfs(pos + 1 , num , sum) ;
    if(sum + a[pos] <= m && num + 1 <= n)
    dfs(pos + 1 , num + 1 , sum + a[pos]) ;
}
int main()
{
    while(~scanf("%d%d" ,&n , &m))
    {
        scanf("%d" , &k ) ;
        for(int i = 1;i <= k;i++)
        scanf("%d" ,&a[i]) ;
        sort(a+1 , a+1+k) ;
        int sum = 0 ;
        for(int i = k;i >= k - n + 1 ; i --)
        sum += a[i] ;
        if(sum <= m){cout<<sum<<endl;continue ;}
        ans = 0 ;
        dfs(1 , 0 , 0) ;
        cout<<ans<<endl;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

hdu3448Bag Problem 暴力枚举

标签:暴力

原文地址:http://blog.csdn.net/cq_pf/article/details/47089831

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