dp打开思路:HDU1029 HDU1087 HDU1176 HDU1257 POJ1458(水题不水)

题目:https://vjudge.net/contest/68966#overview

HDU - 1029

题意:找出出现次数超过一半的数字

蠢思路:排序找中间

DP:扫一遍一个变量count记录解出现的次数,是当前解就++,否则--,count为负就换掉当前解。(解释:想象解全都挨在一起(前面),count先达到最大,然后减为1或0,而其他数字先出现,可能会使正确解的count减为负数,但都会使正确解在后面更多,从而保证了结束时肯定为正确解)代码拿来

 

//在代码可读性较好的前提下才追求代码简洁,所以没有缩哦
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{int n;while(scanf("%d",&n)!=EOF){int temp,k=0;int count=0;while(n--){scanf("%d",&temp);if(temp==k)count++;else{count--;if(count<0){count=0;k=temp;}}}printf("%d\n",k);}
}

HDU 1087

题意:找递增子序列的最大和

思路:和最长递增子序列类似,只是dp[i]=max(之前的)+第i个数的值。

 

HDU - 1176 

题意:略,百度原题自己看

思路:dp[t][x]  表示第t秒第x个位置上有馅饼掉落,把所有馅饼都填入表,从底往上走,走到最上面,求经过和最大。

注:刚开始想不到是这种题,还是思维不够开啊,用二维表示时间和一维空间,很巧妙。(萌新跳转https://blog.csdn.net/hebtu666/article/details/79964233第二题)

 

HDU - 1257 

题意:就是求一个最长上升子序列啊

解释:对于这个最长上升子序列而言,每一个数代表一个拦截系统的最小值,并且由于序列是上升的,每一个数都不能再拦截序列中的下一个数,因为下一个数更大,因此这个子序列的长度就是拦截系统数。

注:我原来以为是找最长下降子序列并对剩下的数递归,直到没有数字,看有几个序列。是我脑子不够活。

 poj-1458

最长公共子序列

经典题

核心代码

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

if(str1[i-1]==str2[j-1]) dp[i][j]=dp[i-1][j-1]+1; 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dp打开思路2:POJ2533 HDU1114 HDU1260 HDU1160(水题不水)

题目&#xff1a;https://vjudge.net/contest/68966#overview POJ2533 最长上升子序列&#xff0c;很平常的题&#xff0c;但是维持单调队列二分还是值得一贴的&#xff0c;O(nlogn) 关键思想&#xff1a;出现在单调队列里的数都在当前接收的数之前&#xff0c;所以找到最小…

二分查找及一般拓展总结

二分-不止是查找哦 二分过程&#xff1a;首先&#xff0c;假设表中元素是按升序排列&#xff0c;将表中间位置记录的关键字与查找关键字比较&#xff0c;如果两者相等&#xff0c;则查找成功&#xff1b;否则利用中间位置记录将表分成前、后两个子表&#xff0c;如果中间位置记…

第三次课 课上代码

这次可能比较简短&#xff0c;这样也好&#xff0c;可读性比较强。 别问我为什么&#xff0c;我不会告诉你们我把代码关了的哼哼。 简单复习、注意事项及小知识强调讲解 作业讲解 列表的遍历 For循环&#xff08;这个参考切片&#xff0c;视频有详细讲解&#xff0c;一样的…

排序算法基本介绍及python实现(含详细注释)

对数组排序可以说是编程基础中的基础&#xff0c;本文对八种排序方法做简要介绍并用python实现。 代码中注释很全&#xff0c;适合复习和萌新学习。这是刚入学自己写的&#xff0c;可能难免比不上标准的写法&#xff0c;但是懒得改了。 文末会放和排序相关的基本拓展总结链接…

第二次作业 讲解及展示

第二次作业&#xff0c;同学们虽然在认真完成&#xff0c;但是或多或少都出了一些错误&#xff0c;一班张婷&#xff0c;四班武仪人&#xff0c;六班杨泽宇&#xff0c;八班候雯洁&#xff0c;安锦阳&#xff0c;刘净圆&#xff0c;这些同学完成的较为出色&#xff0c;错误较少…

深搜DFS\广搜BFS 图初步入门

首先&#xff0c;不管是BFS还是DFS&#xff0c;由于时间和空间的局限性&#xff0c;它们只能解决数据量比较小的问题。 深搜&#xff0c;顾名思义&#xff0c;它从某个状态开始&#xff0c;不断的转移状态&#xff0c;直到无法转移&#xff0c;然后退回到上一步的状态&#xf…

素数基本(埃氏筛法/线性筛法)

一、检查n是否为素数 最简单思路&#xff1a;所有可能的因数全部试一遍。 int gg(int n) {for(int i2;i<n;i){if((n%i)0)return 0;//有因数就不是素数咯}return 1; } 进一步思考&#xff1a;没必要枚举所有的数&#xff0c;每一个小于n^(1/2)的因数i&#xff0c;一定有一个大…

欧几里得gcd/extend_gcd

正式叙述前还写了一点自己的小感受。 问题&#xff1a;求两个正整数a&#xff0c;b的最大公约数。 大神看来是很简单的问题&#xff0c;但是对于去年夏天刚学python的我来说&#xff0c;这是个很难的问题&#xff0c;还记得当时一晚上睡不着都在想怎么快一点的求出最大公约数…

python基础技巧总结(一)

最近总结一下python基础知识&#xff0c;就暂时弃坑了。 本文总结只属于python的一些骚操作。。。 后面文章自行去博客学习交流 原地交换 Python 提供了一个直观的在一行代码中赋值与交换&#xff08;变量值&#xff09;的方法 x, y 10, 20 print(x, y)x, y y, x print(x…

python基础技巧总结(二)

一总结的链接&#xff1a; 好&#xff0c;我们继续 一次性初始化多个变量 可以直接赋值&#xff1a; a,b,c,d1,2,3,4 可以利用列表&#xff1a; List [1,2,3] x,y,zList print(x, y, z) #-> 1 2 3 &#xff08;元素个数应与列表长度相同&#xff09; 打印模块路径 im…

python基础技巧总结(三)

前两篇文章&#xff1a; https://blog.csdn.net/hebtu666/article/details/81698235 https://blog.csdn.net/hebtu666/article/details/81698329 我们继续总结&#xff1a; 开启文件分享 Python 允许运行一个 HTTP 服务器来从根路径共享文件&#xff0c;下面是开启服务器的…

python基础技巧总结(四)

前三期请到我博客里找 https://blog.csdn.net/hebtu666 我们继续总结 except的用法和作用 try/except: 捕捉由PYTHON自身或写程序过程中引发的异常并恢复 except: 捕捉所有其他异常 except name: 只捕捉特定的异常 except name, value: 捕捉异常及格外的数据(实例) exce…

python基础技巧总结(五)

前四期到博客找&#xff1a;https://blog.csdn.net/hebtu666 我们继续说一些好用的函数 split Python split() 通过指定分隔符对字符串进行切片&#xff0c;如果参数 num 有指定值&#xff0c;则仅分隔 num 个子字符串。 语法&#xff1a; str.split(str"", num…

堆的简单实现

关于堆不做过多介绍 堆就是儿子的值一定不小于父亲的值并且树的节点都是按照从上到下&#xff0c;从左到右紧凑排列的树。 &#xff08;本文为二叉堆&#xff09; 具体实现并不需要指针二叉树&#xff0c;用数组储存并且利用公式找到父子即可。 父&#xff1a;(i-1)/2 子:…

二叉搜索树实现

本文给出二叉搜索树介绍和实现 首先说它的性质&#xff1a;所有的节点都满足&#xff0c;左子树上所有的节点都比自己小&#xff0c;右边的都比自己大。 那这个结构有什么有用呢&#xff1f; 首先可以快速二分查找。还可以中序遍历得到升序序列&#xff0c;等等。。。 基本操…

python基础小白题

题目1&#xff1a;有1、2、3、4四个数&#xff0c;能组成多少个互不相同且无重复的三位数&#xff1f;都是多少&#xff1f; list_num[1,2,3,4] all_num[] for i in list_num: for j in list_num: for k in list_num : if (i!j) and (i!k) and (j!k): numi*100j*10k all_num…

python基础小白题2

题目11&#xff1a;判断101-200之间有多少个素数&#xff0c;并输出所有素数。 num[] for i in range(100,201): ji//2 for k in range(2,j): if i%k0: break else: num.append(i) print(一共有%d个素数\n这些素数是&#xff1a; %len(num),num ) 输出结果&am…

python基础小白题3

题目021&#xff1a;猴子吃桃问题 猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不瘾&#xff0c;又多吃了一个 第二天早上又将剩下的桃子吃掉一半&#xff0c;又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时&#x…

python基础小白题4

题目031&#xff1a;请输入星期几的第一个字母来判断一下是星期几&#xff0c;如果第一个字母一样&#xff0c;则继续判断第二个字母。 def tm031(): 【个人备注】&#xff1a;按照题意要求实现了就行 week [monday,tuesday,wednesday,thursday,friday,saturday,sunday] inp…

python基础小白题5

题目045&#xff1a;统计 1 到 100 之和。 def tm045(): 【个人备注】&#xff1a;简单&#xff0c;但官网有人写的更简单 s 0 for i in range(1,101): si print(s) # 更简洁的方法 print(sum(range(1,101))) 题目046&#xff1a;求输入数字的平方&#xff0c;如果平方运算…