zoukankan      html  css  js  c++  java
  • 【递归】油桶问题dp

    问题 : 【递归】油桶问题

    题目描述

    楚继光扬扬得意道:“当日华山论剑,先是他用黯然销魂掌破了我的七十二路空明拳,然后我改打降龙十八掌,却不防他伸开食指和中指,竟是六脉神剑,又胜我一筹。可见天下武学彼此克制,武学之道玄之又玄!……哎,谁用炒锅敲我头?”

    楚继光的老妈大声骂道:“玩个石头剪刀布都说得这般威风,炒菜没油了,快给我去装!”

    “这么凶干嘛?不就吹吹牛嘛。”楚继光边嘟嘟囔囔边走进储藏室,看到储藏室有N个油桶都装 满了油,这N个油桶容积各不相同(容积为整数),楚继光需要M升油(M也为整数),请你不借助任何其他容器,判断能否直接在N桶油中取任意K桶 (1≤K≤N)油,其油的总量正好是M升,如果可以,就输出yes,否则输出no。

    输入

    第一行为两个整数N,M,第二行为N个整数,即油桶的容积。

    输出

    输出结果即yes或者no。

    样例输入

    5 10
    1 2 3 1 1
    

    样例输出

    no
    #include <iostream>
    #include <cstdio>
    using namespace std;
    const int maxn  = 1003;
    int n, K, a[maxn];
    bool dp[maxn][maxn];
     
    void slove(){
        dp[0][0] = true;
        for(int i = 0; i < n; i++){
            for(int j = 0; j <= K; j++){
                for(int k = 0; k <= 1 && a[i] * k <= j; k++){
                    dp[i+1][j] |=dp[i][j - k * a[i]];
                }
            }
        }
        if (dp[n][K])  printf("yes
    ");
        else printf("no
    ");
    }
    int main()
    {
        scanf("%d%d", &n, &K);
        for(int i = 0; i < n; i++){
            scanf("%d",&a[i]);
        }
        slove();
        return 0;
    }
     
    View Code
  • 相关阅读:
    C# Enum,Int,String的互相转换
    彻底弄懂css中单位px和em,rem的区别
    HTML特殊字符大全2
    网页特殊符号HTML代码大全
    HTML特殊字符大全
    收集一些特殊的符号
    jQuery 获取屏幕高度、宽度
    HTMLParser 使用详解
    C# 操作Word知识汇总
    C#编程总结(一)序列化
  • 原文地址:https://www.cnblogs.com/cshg/p/5641850.html
Copyright © 2011-2022 走看看