zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    separable-sss
    Separable Subsurface Scattering Computer Graphics Forum 2015
    GPU Gems 3》:真实感皮肤渲染技术总结
    Subsurface scattering support in Blinn-Phong material
    vue-3d-model
    Ubuntu16.04 安装显卡驱动 cuda,cudnn
    vue.js three.js component
    imagemagick Selective blur
    Leetcode 201.数字范围按位与
    Leetcode 190.颠倒二进制位
  • 原文地址:https://www.cnblogs.com/h-hkai/p/8117574.html
Copyright © 2011-2022 走看看