您当前的位置: 首页 >  Java

小A点菜(洛谷P1164题题解,Java语言描述)

星拱北辰 发布时间:2020-05-04 13:48:28 ,浏览量:1

题目要求

题目链接

在这里插入图片描述

分析

用 D P DP DP做是必然的,讲讲二维的吧: f [ i ] [ j ] f[i][j] f[i][j]:用前 i i i道菜用光 j j j元钱的可能组合数 剩下的钱等于第 i i i道菜的价格时, f [ i ] [ j ] = f [ i − 1 ] [ j ] + 1 f[i][j]=f[i-1][j]+1 f[i][j]=f[i−1][j]+1 剩下的钱大于第 i i i道菜的价格时, f [ i ] [ j ] = f [ i − 1 ] [ j ] + f [ i − 1 ] [ j − v [ i ] ] f[i][j]=f[i-1][j]+f[i-1][j-v[i]] f[i][j]=f[i−1][j]+f[i−1][j−v[i]] 剩下的钱小于第 i i i道菜的价格时, f [ i ] [ j ] = f [ i − 1 ] [ j ] f[i][j]=f[i-1][j] f[i][j]=f[i−1][j]

可以压缩为一维 D P DP DP: f [ j ] + = f [ j − v [ i ] ] f[j]+=f[j-v[i]] f[j]+=f[j−v[i]] 解读为:当前花费情况下的点菜可能数,对于每道菜,包含点这个菜和不点这个菜的两种可能数之和。

AC代码(Java语言描述)
import java.io.IOException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(), m = scanner.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i = i; j--) {
                result[j] += result[j-i];
            }
        }
        System.out.println(result[m]);
    }
}
关注
打赏
1688896170
查看更多评论

星拱北辰

暂无认证

  • 1浏览

    0关注

    1201博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0827s