zoukankan      html  css  js  c++  java
  • 10-能不能组成m

    /*                                              找数达人
                  时间限制:1000 ms  |  内存限制:65535 KB
                                难度:2

    描述

        小明最近做出了一道题:如何在一组数中寻找三个数,这三个数的和等于一给出的定值m,洋洋得意。于是小华不乐意了,小华说,你能找找在一组数字中是否有n个数,

    使得这n个数的和等于一给定的定值m吗?

         1.0 < 数字大小 <= 1000

         2. 0 < 序列中数字个数 <= 1000

         3. 0 <= m <=1000

    输入
        多组数据,每组两行,第一行为序列内容,第二行为m的值。
    输出
        如能找到,输出Yes,否则,输出No。
    样例输入

        1 3 4 5
        5
        1 3 4 5 9
        2

    样例输出

        Yes
        No
    */
    //思路:想到01背包就简单了

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    int dp[1005];
    int a[1005];

    int main(){
        char c;
        while(~scanf("%d%c", &a[0], &c)){    //表示不会数据的输入#_#
            int m, i = 0;
            memset(dp, 0, sizeof(dp));
            while(c != ' ')
                scanf("%d%c", &a[++i], &c);
            scanf("%d", &m);
            
            for(int j = 0; j <= i; j++){   //注意这里要小于等于i
                for(int k = m; k >= a[j]; k--){
                    if(dp[k - a[j]] + a[j] > dp[k])
                        dp[k] = dp[k - a[j]] + a[j];
                }    
            }
            if(dp[m] == m)
                printf("Yes ");    
            else
                printf("No ");
            }
        return 0;
    }

  • 相关阅读:
    2020.12.15
    2020.12.14
    2020.12.13
    2020.12.11
    2020.12.10
    语音合成标记语言(SSML)
    Skyline查询
    win10 VMware 安装 Linux 虚拟机
    图像梯度计算
    Harris Corner Detection
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7397779.html
Copyright © 2011-2022 走看看