首页 > 其他分享 >P1164 小A点菜

P1164 小A点菜

时间:2024-04-04 10:22:05浏览次数:22  
标签:val res ll dfs P1164 点菜 include dp

这种的动态规划题目主要还是不能被自己的思路限制了,之前的dp[i][j]是“最大值”;
这里得把dp[i][j]理解为前i个物品放到j容的背包中的方法;
那么很显然有递推公式:

代码:

#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<sstream>
#include<string>
#include<string.h>
#include<iomanip>
#include<stdlib.h>
#include<map>
#include<queue>
#include<limits.h>
#include<climits>
#include<fstream>
#include<stack>
typedef long long ll;
using namespace std;


const int N = 1e4 + 5;
ll n, m;
ll val[N];
ll dp[N][N];

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n >> m;
	for (int i = 1; i <= n; i++)cin >> val[i];
	for (int i = 1; i <= n; i++)
	{
		for (int j = 0; j <= m; j++)
		{
			if (val[i] > j)dp[i][j] = dp[i - 1][j];
			else if (val[i] == j)dp[i][j] = dp[i - 1][j] + 1;
			else dp[i][j] = dp[i - 1][j] + dp[i - 1][j - val[i]];
		}
	}
	cout << dp[n][m];
	return 0;
}

srds我不明白我的dfs为什么会T啊!QAQ
贴,以后看:

ll dfs(ll i, ll j)
{
	// 前i个物品装到容量为j的包中的种数
	if (dp[i][j] != 0)return dp[i][j];
	if (i == 0)return 0;
	ll res = 0;
	if (val[i] > j)res = dfs(i - 1,j);
	else if (val[i] == j)res = dfs(i - 1, j) + 1;
	else res = dfs(i - 1, j) + dfs(i - 1, j - val[i]);
	return dp[i][j] = res;
}

标签:val,res,ll,dfs,P1164,点菜,include,dp
From: https://www.cnblogs.com/zzzsacmblog/p/18113953

相关文章

  • 洛谷题单指南-递推与递归-P1164 小A点菜
    原题链接:https://www.luogu.com.cn/problem/P1164题意解读:要求正好把钱花完,并且统计不同的点菜方案数,本质上是一个背包问题,给定背包体积,要求物品正好装满背包的方案数。解题思路:1、最直观的解法是暴搜:DFS枚举每一道菜,有点或者不点两种选择,并且累加上已花费的总金额递归前,判断......
  • [Luogu] P1164 小A点菜
    题目传送门一道动态规划,\(dp_{i, j}\)表示用前\(i\)个菜品花光\(j\)元的方法总数那么可以推出状态转移方程:\(if(j>a_i)\spacedp_{i,j}=dp_{i-1,j}+dp_{i-1,j-a_{i}}\)如果j比ai大,那么方案数就是不买\(dp_{i − 1, j}\)+买\(dp_{i − 1, j − a_i}\),其中如果买,那么......
  • 菜单点菜2-5次以及期中考试分析-21207310姜昊
    本次分析菜单2-4,以及期中考试题目,总体来说题目有一定难度,但仍可完成,主要从菜单1过度到2,3时要确定好方向,否则会产生一些无法解决的问题7-4菜单计价程序-2分数:38输入样例:在这里给出一组输入。例如:麻婆豆腐12油淋生菜91麻婆豆腐222油淋生菜13end输出样例:在这......
  • P1164-DP【橙】
    这道题让我更深入的理解了记忆化搜索的过程,既然记忆化搜索的结果要靠返回值来传递,那么记忆化搜索解决问题的必须是倒序的,即记忆化搜索是一个简化问题倒序解决的过程,普通搜索是一个复杂化问题逐步尝试并记录尝试结果的过程。特别是对于求总种数的记忆化搜索,就是把能干的事情组合起......
  • P1164 小A点菜
    餐馆菜品种类不少,有N种,第i中卖c[i]元,且每种只有一样小A要把V元全部花光,问有多少种点菜方式1.动态规划dp[j]=dp[j]+dp[j-c[i]]intmaxval(intV,vector<int>&c){intn=c.size();vector<int>dp(V+1);dp[0]=1;for(inti=0;i<n;i++)for(in......
  • 菜单前三次点菜程序总结
    (1)前言(2)设计与分析(3)采坑心得(4)主要困难以及改进建议(5)总结前言: 题目知识点题量(※※※※※)难度(※※※※※)点菜11.区别和学会使用了对象和类;2.基本语法,如输入输出,基本类型和包裹类型3.常见的处理字符串的方法4.方法静态和不静态的使用5.类构造方法的使用6.......
  • KY66 点菜问题
    题意:类比0-1背包问题。在背包容量为C的情况下,从N件物品中选择x件物品放入背包,使得物品总容量不超过背包容量且物品总价值达到最大。代码:#include<iostream>usingname......
  • C++酒店点菜管理系统[2022-12-31]
    C++酒店点菜管理系统[2022-12-31]题目25“酒店点菜管理系统设计”1问题描述:为了适应现代信息时代点餐的需求,采用新信息技术,研究设计了一个计算机点餐系统。能够完成权......
  • 二维数组实现点菜
    privatestaticvoiddemo4(){String[][]menu={{"糖醋带鱼","12","加辣","加葱"},{"麻婆豆腐","15","加辣"},{"南......
  • 【算法】算法之点菜问题(C++源码)
    【算法】算法之点菜问题(C++源码)​​一、任务描述​​​​二、例子​​​​三、步骤描述​​​​四、运行结果截图​​​​五、源代码(C++)​​一、任务描述某实验室经常有活动......