描述

针对满足特定条件的一类问题,对各状态维度进行分阶段,有顺序,无重复,决策性的遍历求解。

要素

状态,阶段,决策;

条件

子问题重叠性,无后效性,最优子结构性质;

常见dp

  • LIS问题
  • LCS问题
  • 数字三角形
  • 0/1背包
  • 完全背包
  • 多重背包
  • 分组背包
  • 区间dp

例题讲解

现在我们有N个配件,他们有不同的价值. 但是我们背包的容量是有限的,因为我们只有一个一级包, 所以我们最多可以装V重量的东西. 但是为了能更好的吃到鸡(不存在的)我们要携带更有价值的配件,请问我们最多能拿多少价值的配件来当快递员呢??

分析:很经典的0/1背包问题,直接dp求解即可,还可以顺便空间压缩.

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
const ll size = 1e5+5;
ll v[size],w[size],dp[size];
int main()
{int T;cin >> T;while(T--){ll n,V;cin >> n >> V;for(int i = 1;i <= n;++i)scanf("%lld",v+i);for(int i = 1;i <= n;++i)scanf("%lld",w+i);for(int i = 0;i <= V;++i) dp[i] = 0;for(int i = 1;i <= n;++i)for(int j = V;j >= 0;--j)if(j >= w[i]) dp[j] =  max(dp[j],dp[j-w[i]]+v[i]);cout << dp[V] << endl;}return 0;}

在 ACM 能够开展之前,必须准备预算,并获得必要的财力支持。该活动的主要收入来自于 Irreversibly Bound Money (IBM)。思路很简单。任何时候,某位 ACM 会员有少量的钱时,他将所有的硬币投入到小猪储钱罐中。这个过程不可逆,因为只有把小猪储钱罐打碎才能取出硬币。在足够长的时间之后,小猪储钱罐中有了足够的现金,用于支付 ACM 活动所需的花费。
但是,小猪储钱罐存在一个大的问题,即无法确定其中有多少钱。因此,我们可能在打碎小猪储钱罐之后,发现里面的钱不够。显然,我们希望避免这种不愉快的情况。唯一的可能是,称一下小猪储钱罐的重量,并尝试猜测里面的有多少硬币。假定我们能够精确判断小猪储钱罐的重量,并且我们也知道给定币种的所有硬币的重量。那么,我们可以保证小猪储钱罐中最少有多少钱。
你的任务是找出最差的情形,即判断小猪储钱罐中的硬币最少有多少钱。我们需要你的帮助。不能再贸然打碎小猪储钱罐了!

分析:很直接的完全背包问题

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
const ll INF = 1e17;
ll w[100005],v[100005],dp[100005];
int main()
{int T;cin >> T;while(T--){int n,m,t;cin >> m >> t >> n ;m = t-m;for(int i = 1;i <= n;++i) scanf("%lld%lld",v+i,w+i);for(int i = 1;i <= m;++i) dp[i] = INF;for(int i = 1;i <= n;++i)for(int j = 0;j <= m;++j)if(j >= w[i])dp[j] = min(dp[j],dp[j-w[i]]+v[i]);if(dp[m]<INF)printf("The minimum amount of money in the piggy-bank is %lld.\n",dp[m]);else printf("This is impossible.\n");}return 0;
} 

郭哥与瑞瑞在玩一个游戏.
  他们先各自写下一串字符,然后互相展示。展示过后,他们再从自己写的那串字符中依次挑出若干字符(保持原有顺序不变),组成新的一串。他们希望自己新组成的字符串与对方新组成的完全相同,并且尽可能长。
  例如,郭哥写下abcde,瑞瑞写下aeiou,然后郭哥挑出自己那串里的第1和第5个字符组成新串ae,瑞瑞挑出自己那串中的第1、2个字符,也组成字符串ae。ae就是他们能共同挑出的最长串。
  现在,郭哥和瑞瑞分别写出了自己的字符串,请帮他们算一下他们能共同挑出组成的字符串最长有多长。

分析:套LCS模板即可.

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
const ll INF = 1e17;
char s1[100005],s2[100005];
int dp[1005][1005];
int main()
{while(~scanf("%s%s",s1+1,s2+1)){int l1 = strlen(s1+1),l2 = strlen(s2+1);for(int i = 1;i <= l1;++i)for(int j = 1;j <= l2;++j)if(s1[i]==s2[j]) dp[i][j] = dp[i-1][j-1]+1;else dp[i][j] = max(dp[i-1][j],dp[i][j-1]);printf("%d\n",dp[l1][l2]);}return 0;
}

总结:dp一般情况下只需找出状态转移方程即可不讨论程序细节的求解.

2021_GDUT_Dynamic Programming相关推荐

  1. docker报错:driver failed programming external connectivity on endpoint, iptables:No chain by that name

    docker 报错: Error response from daemon: Cannot restart container hello: driver failed programming ext ...

  2. Java OOP(Object Oriented Programming)个人理解及总结

    面向对象编程(Object Oriented Programming,OOP,面向对象程序设计) 其三大特征:封装,继承,多态: 封装:解决数据的安全问题. 继承:解决代码的重用问题. 多态:解决程序 ...

  3. Structured Streaming编程 Programming Guide

    Structured Streaming编程 Programming Guide • Overview • Quick Example • Programming Model o Basic Conc ...

  4. 算法编程Algos Programming

    算法编程Algos Programming 不同算法的集合,用于编程比赛,如ACM ICPC. 算法按主题划分.大多数算法都可以从文件中按原样运行.每种算法都有一个参考问题,并对其时间和空间复杂度作了 ...

  5. CSE 3100 Systems Programming

    代做CSE 3100留学生作业.代写C/C++程序作业.代做Systems Programming作业.代写C/C++编程设计作业 CSE 3100 Systems Programming Homew ...

  6. Programming C# 学习笔记(二) 出发:“Hello World”

    小序:      准备写这章的学习笔记了,啊,Hello World!多么亲切的语句,呵呵,当初学C语言的第一个程序就是输出它, 还记得费了好大劲终于把它输出来时候的那种兴奋感觉,真是让我怀念哦!(然 ...

  7. ADPRL - 近似动态规划和强化学习 - Note 7 - Approximate Dynamic Programming

    Note 7 - 近似动态规划 Approximate Dynamic Programming 7. 近似动态规划 (Approximate Dynamic Programming) 7.1 近似架构 ...

  8. ADPRL - 近似动态规划和强化学习 - Note 5 - Banach Fixed Point Theorem in Dynamic Programming

    动态规划中的巴拿赫不动点定理 5. Banach Fixed Point Theorem in Dynamic Programming 5.1 巴拿赫不动点定理定理 (Banach fixed poi ...

  9. 强化学习(二)- 动态规划(Dynamic Programming)

    3.动态规划 3.1 介绍 术语动态规划(DP:Dynamic Programming) 指的是一个算法集合,可以用来计算最优策略,给定一个完美的环境模型,作为马尔可夫决策过程(MDP).经典的DP算 ...

最新文章

  1. 《2018-2019世界智能手机AI智商测试报告》发布会将在京举办
  2. python零基础难学吗-如何从零开始学习Python,零基础学python难吗
  3. 大型企业云化2.0的深度思考与展望
  4. Socket(套字节)编程,客户端 服务器端的发送消息
  5. IDC公司对未来5年的10项IT预测
  6. 清除WINDOW远程登录服务器的信息
  7. MSPlus DatePicker WebControl FreeVersion 1.1.0906 发布啦!
  8. 我的docker随笔7:docker容器与主机之间文件拷贝
  9. ubuntu安装redis_在Ubuntu上安装Redis
  10. 文件共享文件传输samba ftp nfs
  11. tamura纹理特征 JAVA_tamura纹理特征算法
  12. android inflate,Android LayoutInflater inflate() 图示详解
  13. c语言程序 计算离高考天数,用c++程序计算一个孩子从出生到高考需要多少天
  14. 解决win10只有IE可以上网,其他浏览器都无法连接网络
  15. JavaScript将后端获取到的byte数组转为文件
  16. PHP自适应小说网站源码深度SEO优化自动采集
  17. 怎样在Word中存储高清图,并输出PDF
  18. vscode开发小程序需要安装的插件集合
  19. mysql从一台电脑迁移_mysql数据库迁移到另一台电脑上
  20. MATLAB求矩阵的100次方,Matlab矩阵幂运算

热门文章

  1. modemNICsound card
  2. 电工配线端接实训装置-楼宇智能实训室
  3. asp.net医疗器械销售系统
  4. 没学过python、但是还是有公司要-为什么自学Python看不进去?
  5. MATLAB牛顿法求解非线性方程组2
  6. 智慧路灯,未来将取代90%的普通路灯?
  7. niu B快速开发工具简介
  8. LoadRunner中IP欺骗功能详解
  9. AZ3166开发套件
  10. Ansoft安装报错reg_ansys.exe ERROR:Error3221227010