来自澳大利亚的兵


私信TA

用户名:zhangjun678

访问量:2978

签 名:

等  级
排  名 244
经  验 5877
参赛次数 0
文章发表 28
年  龄 0
在职情况 学生
学  校 djtu
专  业 计算机科学与技术

  自我简介:

喜欢数学,编程小白

解题思路:dp[i]=0代表当钱数为i时没有办法得到

dp[i]=1代表可以得到

注意事项: 为啥dp[]后面存放数字全是1呢?

因为当dp连续出现>=最小面额的1时之后的dp数组全为1了

如 4 7

连续出现 18=7+7+4

               19=7+4+4+4

                20=4+4+4+4+4
                21=7+7+7

     之后就全可以取到了
参考代码:


import java.util.Scanner;

public class Main{
   static int dp[]=new int[1000000];
   public static void main(String[] args) {
       Scanner sc=new Scanner(System.in);
       int n=sc.nextInt();
       int m=sc.nextInt();
       int result = 0;

//面额只为n时的情况
       for(int i=0;i<dp.length;i++){
           if(i%n==0)
               dp[i]=1;
       }

//面额增加了一个m
       for(int i=0;i<dp.length;i++)
       {
           if(i>=m &&dp[i]==0)
                dp[i]=dp[i-m];
       }

//从后向前遍历
            for(int i=dp.length-1;i>=1;i--)
                if(dp[i]!=1)
                {
                   result=i;
                   break;
                }
//             for(int i=0;i<=25;i++)
//                 System.out.print(dp[i]+" ");
          System.out.println(result);      
   }
}

 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区