• 1232: 买不到的数目 [DP、数学]


    1232: 买不到的数目 [DP、数学]

    时间限制: 1 Sec 内存限制: 128 MB

    提交: 21 解决: 10 统计

    题目描述

    小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。

    小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买  10  颗糖。

    你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。

    本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。

    输入

    两个正整数,表示每种包装中糖的颗数(不超过1000)

    不需要考虑无解的情况

    输出

    一个正整数,表示最大不能买到的糖数

    样例输入

    4 7
    3 5
    

    样例输出

    17
    7

    虽然上面提示的是dp,但是自己想了一下,还是没想到怎么用dp来解这道题,后来看了看别人的bolg,发现这个题的测试数据较小,所以可以用枚举的方法来找到答案

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    const int maxn = 1000005;
    
    using namespace std;
    
    int dp[maxn];//dp[i][j]表示在前i个数中,总重量不超过j的最大价值
    
    int main()
    {
        int n, m, sum, ans;
    
        while(scanf("%d %d", &n, &m) != EOF)
        {
            memset(dp, 0, sizeof(dp));
    
            for(int i = 0; i*n <= n*m; i++)
            {
                for(int j = 0; j*m <= n*m; j++)
                {
                    sum = i*n + j*m;
                    dp[sum] = 1;
                }
            }
    
            for(int k = n*m; k > 0; k--)
            {
                if(dp[k] == 0)
                {
                    ans = k;
                    break;
                }
            }
    
            printf("%d
    ", ans);
        }
    
        return 0;
    }
    View Code

    还以一种方法可以通过公式来直接计算出结果,不过推导过程不会,多写几组数据应该可以找到规律

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    CGLib实现不同类中同名不同类型属性复制
    stream 伪复用实现
    年终盘点 | 2020年,国内私有云正式进入3.0时代
    高危端口135,137,138,139,445,1025,2475,3127,6129,3389,593
    在jsp引入js失败,提示404
    安全漏洞扫描
    Go 实现的文件行数统计工具
    .NET Core 获取域名 DNS 解析记录
    .NET Core 操作 Windows 注册表
    .NET MongoDb BsonDocument 序列化
  • 原文地址:https://www.cnblogs.com/h-hkai/p/8117574.html
Copyright © 2020-2023  润新知