首页 > 其他分享 >洛谷 P1164 小A点菜(DP:01背包)

洛谷 P1164 小A点菜(DP:01背包)

时间:2022-09-27 21:00:27浏览次数:91  
标签:01 洛谷 LL cin P1164 块钱 菜品 DP

https://www.luogu.com.cn/problem/P1164

题目大意:

给定n种菜品(每种菜品只有1份),m块钱;

问我们花完了这m块钱可以点的不同种类的菜品有多少种方案数?
输入
4 4
1 1 2 2
输出
3

输入
10 9
1 2 3 4 5 6 7 8 9 10
输出
8
  • f[i][j]表示前i个菜品刚好花了j块钱的组合数

  • 当只有0元的时候,买啥都买不起,所以边界状态就是1种:买不起的状态

状态转移的两种情况:

  1. 买当前第i道菜品,这个时候前i-1个菜品所需要的钱应该是j-a[i], 也就是说前i个物品中所有能凑出j-a[i]元的方案数量再加上当前这道菜品,就可以变成前i个物品所需的钱为j的方案数。
    即f[i][j]+=f[i-1][j-a[i]];

2.不买当前第i道菜品,这时候,也就是前i-1个物品凑成j的方案,
即f[i][j]+=f[i-1][j];

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL N=200200,M=2002;
LL a[N];
LL f[M][M];
//f[i][j]表示前i个菜品刚好花了j块钱的组合数
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    //cin>>T;
    while(T--)
    {
        LL n,m;
        cin>>n>>m;
        for(LL i=1;i<=n;i++)
            cin>>a[i];
        for(int i=0;i<=n;i++)
            f[i][0]=1;
        for(LL i=1;i<=n;i++)
        {
            for(LL j=1;j<=m;j++)
            { 
                f[i][j]+=f[i-1][j];//默认不买,方案数和上一次达到j的方案数一样
                if(j>=a[i]) f[i][j]+=f[i-1][j-a[i]];//买得起,再加上上一次刚好达到j-a[i]的数量
            }
        }
        cout<<f[n][m]<<endl;
    }
	return 0;
}

标签:01,洛谷,LL,cin,P1164,块钱,菜品,DP
From: https://www.cnblogs.com/Vivian-0918/p/16735962.html

相关文章

  • C++学习 Day9-01 指针-定义及使用
    指针变量定义语法:数据类型*变量名;示例:intmain(){ //1、指针的定义 inta=10;//定义整型变量a //指针定义语法:数据类型*变量名; int*p; //指针变量......
  • 洛谷 P1667
    这种奇怪的在数列上操作,看看在前缀和/差分数组上发生了什么事往往能发现新大陆。考虑\(a\)的前缀和\(S\),不难发现操作\([l,r]\)就是交换\(S_{l-1},S_r\)。所以最......
  • 洛谷 P7774 [COCI2009-2010#2] KUTEVI(DP:完全背包)
    https://www.luogu.com.cn/problem/P7774题目大意:给定n个已知角度a[1],a[2],,,a[n];给定m个需要我们去拼凑的角度b[1],b[2],,,b[m];数组a中的角度可以使用任意多次,从......
  • VS2010创建windows服务其实很简单 ProjectInstaller.cs Timer
    VS2010创建windows服务其实很简单ProjectInstaller.cs【IT168技术】很多人会对使用VisualStudio有不少的烦恼,下面我们来看一下作者是如何创建windows服务的,看后你......
  • blog_01
    第一次博客作业目录第一次博客作业1.前言2.设计与分析(1)题目集27-2串口字符解析(2)题目集37-1点线形系列1-计算两点之间的距离(3)题目集37-2点线形系列2-线的计算(......
  • JDBC 尚硅谷 days01-数据库连接方式
    1.JDBC(JavaDatabaseConnectivitu):是一个独立于特定数据库管理系统、通用的SQL数据库存储和操作的公共接口;2.JDBC接口包括两个层次面向应用的API:JavaAPI,抽象接口,......
  • 做题记录整理dp14 P5336 [THUSC2016]成绩单(2022/9/27)
    P5336[THUSC2016]成绩单这题难度标的虚高首先一眼区间dp,然后写出递推方程然后发现爆空间,再上离散化然后就没了。。。撑死也就是蓝题不过学到了一个离散化技巧#incl......
  • 洛谷 CF1257F Make Them Similar 灰 题解
    前言本题解采用折半搜索算法完成,对于不打算用这种方法的同学,这篇题解可能会浪费你人生中宝贵的十几分钟。思路此题似乎找不出什么好的性质,那么考虑暴力。发现\(x,a\)......
  • P4017 最大食物链计数
    P4017最大食物链计数最大食物链计数题目背景你知道食物链吗?Delia生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条。于是她来就来求助你......
  • 01.base-sys 基础搭建
    脚手架base-sys0.简介1.基于SpringBoot+MybatisPlus-Plus的快速开发脚手架,具有完整的权限管理功能,前端使用Vue;2.技术选型:SpringBoot2.7.0容器+M......