首页 > 其他分享 >dp总结(未完)

dp总结(未完)

时间:2025-01-12 12:33:21浏览次数:1  
标签:总结 int sumv pos dfs 草药 dp

动态规划
对于一个能用动态规划解决的问题,一般采用如下思路解决:
1.将原问题划分为若干 阶段,每个阶段对应若干个子问题,提取这些子问题的特征(称之为 状态);
2.寻找每一个状态的可能 决策,或者说是各状态间的相互转移方式(用数学的语言描述就是 状态转移方程)。
3.按顺序求解每一个阶段的问题。
4.能用dp解决的问题需要有三个要素:最优子结构,无后效性和子问题重叠。
列1:背包问题
[NOIP2005 普及组] 采药

问题:总共有 \(M\) 个草药,每个草药得价值为 \(v\) ,每采一个草药需要花 \(t\) 个时间,要求要在一个固定时间 \(T\) 内使采得的药物总价值最大。

方法1:dfs暴力搜索
解法:一个一个往前摸
完整代码:

#include <bits/stdc++.h>
using namespace std;

const int N=1e3+10;
int t[N],v[N],ans;
int T,M;

void dfs(int sumv,int pos,int sumt){
	if(sumt>T) return ;
	if(pos==M) {
		ans=max(ans,sumv);
		return ;
	}
	dfs(sumv+v[pos],pos+1,sumt+t[pos]);
	dfs(sumv,pos+1,sumt);//回溯
}

int main(){
	cin>>T>>M;
	for(int i=0;i<M;i++){
		cin>>t[i]>>v[i];
	}
	dfs(0,0,0);
	cout<<ans;
	return 0;
}

结过:超时,时间复杂度为 \(O(2^N)\) 级别。

方法2:dp(动态规划)
解法:
1.不摘草药
时间不变,把前面得状态复制过来,

dp[i][j]=dp[i-1][j];

2.采摘草药
当前时间减去该草药所需得时间,并且加上该草药的价值,

dp[i][j]=dp[i-1][j-t[i]]+v[i];

然后进行比较

dp[i][j]=max(dp[i-1][j],dp[i-1][j-t[i]]+v[i]);

完整代码:

#include <bits/stdc++.h>
using namespace std;

int t[1001],v[101],dp[1001][1001];  

int main(){
	int T,M;
	cin>>T>>M;
	for(int i=1;i<=n;i++){
		cin>>t[i]>>v[i];
	} 
	for(int i=1;i<=T;i++){ 
		for(int j=1;j<=M;j++){ 
			if(j>=t[i]){
				dp[i][j]=max(dp[i-1][j-t[i]]+v[i],dp[i-1][j]);
			}
			else{
				dp[i][j]=dp[i-1][j];
			}
		}
	}
	cout<<dp[M][T];
	return 0;
}

结过:AC

标签:总结,int,sumv,pos,dfs,草药,dp
From: https://www.cnblogs.com/TobyL/p/18666861

相关文章

  • Atcoder ABC387F Count Arrays 题解 [ 绿 ] [ 基环树 ] [ 树形 dp ] [ 前缀和优化 ]
    CountArrays:一眼秒的计数题。思路显然,把小于等于的条件化为大的向小的连单向边,每个数的入度都是\(1\),就会形成一个基环树森林。那么考虑这个环上能填什么数。因为所有数都小于等于他后面的数,所以所有数都只能相等。这就启发我们在基环树上缩点之后再进行计数。那么当缩完点......
  • 数据分析之年度总结分享
    背景:我们是一家国内的服装公司,在全国拥有几十家服装门店,从事18个服装品类的销售,市场覆盖国内上海、华北、华中、西南、东北、中南、西北七个区域,年销售额达数千万元。财年结束了,老板希望我们(数据分析师)能对公司的销售团队的数据进行分析,并得出结论作为下年度的制定作战的......
  • SAP系统PP生产计划模块业务调研总结报告框架
    文章目录前言业务调研总结报告前言进行业务调研要做到全面、细致、深入,把握业务背景、痛点和需求,才能为后续的专题讨论、蓝图设计及系统实施、测试打下良好的基础。以下为SAP项目PP模块的业务调研总结报告框架示意,供参考。业务调研总结报告一、文档目的二、关......
  • 26个开源Agent开发框架调研总结(1)
    根据Markets&Markets的预测,到2030年,AIAgent的市场规模将从2024年的50亿美元激增至470亿美元,年均复合增长率为44.8%。Gartner预计到2028年,至少15%的日常工作决策将由AIAgent自主完成,AIAgent在企业应用中的重要性正在飞速上升。可以预见,今后几年AIAgent的应用开发还将继......
  • LeetCode题练习与总结:复数乘法--537
    一、题目描述复数 可以用字符串表示,遵循 "实部+虚部i" 的形式,并满足下述条件:实部 是一个整数,取值范围是 [-100,100]虚部 也是一个整数,取值范围是 [-100,100]i^2==-1给你两个字符串表示的复数 num1 和 num2 ,请你遵循复数表示形式,返回表示它们乘积的字符串。......
  • 瑞友天翼应用虚拟化系统 GetPwdPolicy SQL注入漏洞
    0x01阅读须知(免责声明)        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均......
  • 代码随想录训练营第四十五天| 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑
    115.不同的子序列题目链接:115.不同的子序列-力扣(LeetCode)讲解链接:代码随想录 hard确实不好直接说出来粘一下思路:(引自代码随想录)确定dp数组(dptable)以及下标的含义dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。为什么i-1,j-1这么定义卡哥......
  • python基础篇总结:数据类型
    在python中数据类型主要是以下9种分别是1.Int(整型);2.Float(浮点型);3.Bool(布尔型);4.Str(字符串);5.None(空值);6.List(列表);7.Tuple(元组);8.Dict(字典);9.Set(集合)等一.Int(整数)整数是Python中最基本的数值类型,用于表示整数值。1.定义整数变量:2.使用内置函数处理整数:3.进行算术运......
  • CDA证书一级必备知识点【教材精华总结】
    博主已通过CDA数据分析师一级考试,下面是来自红色封皮官方教材中必须要掌握的知识点(个人认为)。最好记住每一个概念都是什么意思,每个分类大类下面都包含哪些小类,尤其是分辨每种图表的用途,每个分析方法的适用场景,真题考了好几个。1、表格结构的数据类型:数值、文本、逻辑2、B......
  • 我的2024(非常年终总结)
    年年总年年结年年刻板与雷同,今年松今年垮今年义在字外意不言中。(笔记模板由python脚本于2025年01月07日19:45:46创建,本篇笔记适合任何的coder翻阅)【学习的细节是欢悦的历程】Python官网:https://www.python.org/Free:大咖免费“圣经”教程《python完全自学教......