zoukankan      html  css  js  c++  java
  • ZOJ 3631 Watashi's BG(dp+dfs)

    题意:一共要吃n顿饭 公款m元

            如果公款大于等于饭局所需费用 就全用公款

            如果小于就自费

            求最后能用的公款为多少

    思路:

            dfs(i - 1, val + dp[i]);

            dfs(i - 1, val);

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <algorithm>
    using namespace std;
    int dp[50];
    int n, m;
    int ans;
    
    void dfs(int i, int val)
    {
        if(ans == m) return;
        if(val > m) return;
        if(i < 1)
        {
            ans = max(ans, val);
            return;
        }
        int j, sum = val;
        for(j = i; j >= 1; j --)
            sum += dp[j];
        if(sum < ans) return;
        dfs(i - 1, val + dp[i]);
        dfs(i - 1, val);
    }
    int main()
    {
        while(scanf("%d%d", &n, &m) != EOF)
        {
            int i;
            for(i = 1; i <= n; i ++)
              scanf("%d", &dp[i]);
            sort(dp + 1, dp + 1 + n);
            ans = 0;
            dfs(n, 0);
            printf("%d
    ", ans);
        }
        return 0;
    }
    
  • 相关阅读:
    [Poi2000]病毒
    [Zjoi2015]诸神眷顾的幻想乡
    P1663 山
    P1837 单人纸牌
    P6584 重拳出击
    CF460C Present
    10.5 学习笔记
    多项式学习笔记(一) FFT
    NOIP 2020 游记
    uva 经典习题选做(dp专项)
  • 原文地址:https://www.cnblogs.com/sola1994/p/4430116.html
Copyright © 2011-2022 走看看