自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 收藏
  • 关注

原创 leetcode(medium)_2

leetcode2题目描述解答题目描述两个链表每个节点的数相加 得到新的链表解答逐位相加(注意最后一位如果有进位也要考虑)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x),...

2019-08-24 23:46:45 136

原创 leetcode(easy)_1

leetcode1题目描述解答1.暴力2.哈希表3.排序题目描述求数组内哪两个位置的数加起来等于给定和。解答1.暴力双重循环遍历整个数组2.哈希表用哈希表将原来数组保存,然后再遍历数组,查找target-当前数的值是否在哈希表中。class Solution {public: vector<int> twoSum(vector<int>& ...

2019-08-22 10:38:38 144

原创 422D

题意:f(i)表示有i个女孩比赛,若不分组,则应当比 次。但可以将他们分为x个组,每组i/x个人,每组分别进行比赛决出一个女孩,再将各个组决出的女孩进行比赛。给出t,l,r,求 t0·f(l) + t1·f(l + 1) + ... + tr - l·f(r). 解答:如果是素数,则无法分组,否则分为i/i的最小质因子组。i的最小质因子可通过筛素数的方法得出。#include#inclu

2017-07-25 13:14:43 464

原创 424C

题意:一个比赛中,有n次打分,有一个初始分数,这个初始分数加上这n次的分可得出n个结果,而作者只记得其中k次的结果,且不确定是哪几次的。问初始分数有多少中可能?解答:首先要初始化这n次的打分的前缀和。注意前缀和地去重处理!v将这k个结果分别枚举为第一次到第n次的结果,分别计算出初始值。如果这个得出某个初始值得次数恰好为k,那么这个初始值即为可能的结果。#include#include#

2017-07-23 23:46:58 505

原创 423D

题意:给出n个点,其中k个点只能有一条边相连,剩下的边至少有2条边相连,问构造出的树最远的两个点最近是多少解答:度为1的点的数目越多,这个距离就越小。那么构造一个中心点,发散地连k个点。不够n的一层一层往最外面的点上面添加即可。#include#include#includeusing namespace std;int main(){ int n,k; whil

2017-07-23 23:26:18 1092

原创 423C

题意:告诉你一些字符串的信息,要求你重组并输出字典序最小的这个字符串,告诉你的信息是,某个子串在某几个位置出现,保证给的信息不冲突 解答:暴力!但是!要注意重复地位置要跳过,不然会超时!#include#include#include#include#include#includeconst int MAXN = 2000100;char s[MAXN];int ss[

2017-07-23 22:59:58 593

原创 822C

题意:给出n个区间和X,每个区间有左右边界和价值,li,ri,x。然后问从这n个区间找出2个不重合的区间,他们的区间长度和为x,并且价值最小。解答:方法一:预处理:记录所有以某个点为左端点、右端点的区间长度和价值。枚举以每个点为左端点和右端点的所有区间。记录每个以该点为右端点的区间的价值的最小值。然后从第二个点为起点更新最小值。#include#include#include#inc

2017-07-23 22:46:36 489

原创 floodfill

题意:有一个大小为N*M的园子,雨后积起了水。八连通的积水被认为是连接在一起的。请求出园子里总共有多少水洼?解答:floodfill.每次dfs可以连通的块。主函数里迭代循环,每找到一个未访问的点,便开始dfs,穷尽所有可以到达的点。#include#include#include#includeusing namespace std;const int MAXN = 150;

2017-07-14 11:06:31 360

原创 部分和问题

题意:给定整数a1,a2,a3...an,判断是否可以从中选出若干数,使它们的和恰好为k.解答:dfs注意:只要存在一种方案,就是true!#include#include#includeusing namespace std;const int MAXN = 110;int n,a[MAXN],k;bool dfs(int step,int t){ if(ste

2017-07-14 10:59:38 314

原创 邮局问题

题意:有横向排列的P个村庄,每个村庄都有一个坐标位置。在这P个村庄上要建V个邮局。问这P个村庄中建造V个邮局之后,所有村庄到最近的邮局的距离的最小值是多少?解答:dp[i][j]表示前i个村庄建造j个邮局的最小距离之和。  dp[i][j] = min(dp[i][j],dp[k][j-1] + w[k+1][j])  w[k+1][j]表示从第k+1个村庄到第j个村庄建立一个邮局的最

2017-07-13 10:57:48 787

原创 矩阵链乘的变换

题意:一串数,每次取掉一个数并且将这个数与周围两个数相乘的结果加起来,最后取得就剩两个数。求最小的答案。解答:区间dp。在网上看到两个答案:第一种思路:dp[i][j]表示从i-1到j最终取得就剩下i-1和j所得的最小值。那么状态转移方程为dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+1][j]+a[k]*a[i-1]*a[j])(i 代码:#incl

2017-07-11 19:35:33 284

原创 括号匹配问题

题目:poj2955题意:给出一个只包含(、)、【、】的字符串,求出最长的合格子串的长度解答:dp[i][j]表示从第i个字符到第j个字符最长的合格子串的长度,由此得出两个转移方程:   dp[i][j] = dp[i+1][j-1] + 2(i和j匹配)   dp[i][j] = max(dp[i][j],dp[i][k]+dp[k+1][j])(i #include#in

2017-07-06 16:33:35 224

原创 石子合并问题

题目:NYOJ737题意:有n堆石子,每堆有a[i]个,每次合并时只能合并相邻的两堆,代价为两堆石子的个数之和。问把这n堆石子合并成一堆需要的最小代价是多少。解答:状态:dp[i][j] 表示合并第 i 堆到第 j 堆石子的最小代价转移方程:dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1])

2017-07-06 14:53:23 283

原创 关于一些数的划分问题

问题一:将n划分为若干正整数之和,有多少种划分方法?(hdu1028)思路一:相当于1-n的完全背包,总重量为n,有多少种组合?思路二:dp[i][j]表示将i分为最多j组的划分方法数        转移方程为:dp[i][j] = dp[i][j-1] + dp[i-j][j] (i         dp[i[j] = dp[i][j-1] + 1(i = j)

2017-07-05 21:32:41 385

原创 【转】isim使用技巧

Isim你不得不知道的技巧(整理)来源:电子产品世界;   注:本文由本人多出整理所得,原文章图片不清晰,自己整理配图后重新发表  安装好ISE,系统已经自带了ISim仿真软件,相比于专业的仿真软件Modelsim,ISim是免费的,不用编译库,小型设计仿真速度较快,对于轻量级的设计应该是完全足够的。Modelsim作为专业的仿真软件,具备了ISim的所有功能,同时

2017-03-23 12:03:18 1554

原创 最长上升子序列的变化

题目:hdu1160题意:一群老鼠,每个老鼠有两个参数:重量和速度。寻找重量递增且速度递减的最长的子序列,输出该序列的坐标顺序。解答:先排序,然后最长上升子序列。注意:排序后坐标会改变,因此,应当在结构体中引入一个新的变量index,保存它的原始位置。保存路径:记录比当前位置小的上一个位置的左边即可。#include#include#include#includeusing n

2017-03-22 00:51:57 329

原创 入门级dp2

题目:hdu1158题意:输入num个月,输入每个月雇佣员工、员工薪资、解雇员工所用的钱。输入每个月至少需要多少个员工(num个数)。解答:dp.注意初始状况:第一个月要分开讨论。注意每一段的取值范围。#include#include#include#includeusing namespace std;const int MAXN = 100 + 10;const int

2017-03-21 20:48:02 312

原创 最大连续子序列和

直接贴代码!int cal(int *q,int len){ int sum = 0; int Max = 0; for(int i = 0;i < len;i++) { sum += q[i]; if(sum < 0) sum = 0; if(sum > Max)

2017-03-04 22:42:54 213

原创 简单记忆化搜索

题目:hdu1078题意:给你一个n*n的地图,从左上角那个点出发,每次从左上角出发,最多走k步,而且每次走到的点必须比上一步的数大,求最大的和。解答:dp[x][y]表示从坐标为(x,y)的地方出发,最多达到的值。每次记录每种走法中的最大值。#include#include#include#include#includeint n,k;using namespace st

2017-03-02 22:45:36 444

原创 stl中的upper_bound和lower_bound

lower_bound:返回最小的大于等于key的位置upper_bound:返回最大的小于等于key的位置头文件:algorithm注意:当使用lower_bound时key的值大于最大的值,查找到的位置是越界的(最大下标+1)    而当使用upper_bound的key的值小于最小的值,查找到的位置是第一个下标格式:假设数组为a,长度为n,pos = lower_boun

2017-02-23 18:07:58 411

原创 最长上升子序列

最长上升子序列,众所周知,是dp的经典问题。用简单的dp解决的复杂度是O(n方),用dp+二分的方法解决的复杂度是O(nlogn).1、转移方程:MaxLen (1) = 1MaxLen (k) = Max { MaxLen (i):12、假定存在一个序列d[1...9]=2 1 5 3 6 4 8 9 7,可以看出LIS长度为5。现在开始一步一步的找出

2017-02-23 14:33:07 237

原创 几种情况的二分写法

之前总是对二分的边界问题把握的不是很好,以致于出现死循环等问题。所以用这篇博文进行总结。首先,本文所用算法均为左闭右闭的算法,且数组是以非递减顺序排列的。1、查找是否存在关键值,如有相等的,则返回最左边的那个值的位置。否则,返回-1.代码如下:int binary_search_1(int a[], int n, int key){ int m, l = 0, r =

2017-02-23 13:48:45 2466 1

原创 简单dp之——m段子序列的最大和

题目:hdu1024题意:m:分成m段。n:数组长度。给定一个数组求m段子区间的最大和解答:dp[i][j]:前j个数分成i组的最大子区间和。1、状态转移方程:dp[i][j] = max(dp[i][j-1] + a[j],max(dp[i-1][k](0 2、优化成一维的。(1)将i放入外层循环当中(2)如何求max(dp[i-1][k])?dp[i-1][k]相当

2017-01-12 21:46:49 1375

原创 普通01背包

题目:hdu1864题意:现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定额度的最大报销额。解答:普通的01背包问题。需要注意的是输入!#include#include#include#

2016-12-03 01:09:31 327

原创 dp/单调栈

题目:hdu1506题意:一个柱形图,宽均为1.内部最大的矩形的面积。解答:刚开始想的是从某个区间内找小的高遍历所有区间找出最大的矩形。但是复杂度太高啦!    正确的解答:从每一条出发,分别求出这一条左边连续比它高的和右边连续比它高的坐标。然后遍历一遍便可以求出最大值。左右!!!可以分别从左边和右边遍历求!!!以左边为例:如果左边那个比它高,那么比它左边还高的一定比它

2016-12-02 13:45:46 461

原创 入门级dp

题目:hdu1260题意:每个人去买花,要么两个人一起买用一个时间,要么一个人一个人单独买,问总共的最少的时间解答:简单dp。状态转移方程dp[i+1] = min(dp[i]+a[i+1],dp[i-1]+b[i]);#include#include#includeusing namespace std;const int MAXN = 2010;int dp[2010];

2016-12-02 01:50:20 327

原创 初学数据库1

select * from movieswhere name between 'A' AND 'J';select * from movies where year between 1990 AND 2000;select * from movieswhere year between 1990 and 2000and genre = 'comedy';select * from

2016-11-30 00:49:29 297

原创 dp1.1

题目:cf363c题意:给你n天的情况 0 代表休息 1 代表只能参加contest或休息 2 代表只能参加gym或休息 3 代表能参加contest或gym或休息要求 不能连续参加contest 不能连续参加gym问 如何安排使得休息日最少 输出休息日的数量解答:d[i][j]表示第i天做什么。j=0:休息。j=1:gym。j=2:休息。#incl

2016-10-14 22:15:25 507

原创 二维费用的背包问题

题目:toj3596题意:有N张光盘,每张光盘有一个价钱,现在要从N张光盘中买M张,预算为L,每张光盘有一个快乐值,要求在不超过预算并且恰好买M张,使得快乐值最大。解答:典型的二维费用背包问题,另外一种隐含的费用为个数,每个物品的个数费用为1。要求恰好买M张表示要求恰好装满,所以初始化不是0,而是-INF。二维背包的状态转移方程:F[i, v, u] = max{F[i − 1, v,

2016-10-14 22:10:36 4550 1

原创 错排公式

题目:hdu1465题意:同时给n个网友每人写了一封信,这都没什么,要命的是,他竟然把所有的信都装错了信封!注意了,是全部装错哟!问有几种装法。题解:错排公式。。f[n] = (n-1) * [f[n-1] + f[n-1]]#include#include#includeusing namespace std;const int MAXN = 25;long long in

2016-10-02 19:47:00 417

原创 母函数练习2

题目:hdu1171题意:有n个物品,每个物品有它的重量和它的数目。求怎么尽可能把它们分成两部分。解答:写出其母函数,然后模拟(也可以用完全背包)#include#include#include#include#includeusing namespace std;const int MAXN = 250005;int c1[MAXN],c2[MAXN];struct

2016-10-02 15:35:52 259

原创 母函数练习

题目:hdu1085题意:给出1元、2元和5元硬币的数量,问你用这些钱币第一个不能组成的钱数是多少解答:母函数模拟~~~#include#include#include#include#define mod 25000001using namespace std;const int MAXN = 8010;int c1[MAXN],c2[MAXN];int main()

2016-10-02 14:04:23 403

原创 有关一些正则表达式的元字符

一些元字符:\s:用于匹配单个空格符,包括tab键和换行符;\S:用于匹配除单个空格符之外的所有字符;\d:用于匹配从0到9的数字;\w:用于匹配字母,数字或下划线字符;\W:用于匹配所有与\w不匹配的字符;. :用于匹配除换行符之外的所有字符。(说明:我们可以把\s和\S以及\w和\W看作互为逆运算)\b:用于匹配单词的开始或者

2016-10-01 21:14:24 352

原创 母函数入门

题目:hdu1028题意:整数拆分(一个整数能有几种拆分方式)解答:其中一种方法是用母函数。对于这道题来说是(1+x+x^2+x^3+x^4...)(1+x^2+x^4+x^6+x^8+x^10+...)(1+x^3+x^6+x^9+...)(...)...   (一直到n) 最后算出来了结果之后系数表示拆分的方法数,指数表示拆几先给代码:#include#include#in

2016-09-21 17:55:11 350

原创 多重背包基础

题目:hdu1171题意:把一个多重背包尽可能地分成相等的两份。解答:背包的总乘重为所有重量的一半,然后尽可能地接近这个总乘重就好。//多重背包#include#include#includeusing namespace std;const int MAXN = 300000;int dp[MAXN];int N,W;int value[55],num[55];vo

2016-09-21 16:13:04 386

原创 二维完全背包

题目:hdu2159题意:xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能升掉这最后一级吗。解答:把忍耐度看成容量,经验值看成是价值。由于限制了放入物品的个数,所以这是一个二维的完全背包问题。dp[j][w]表示用了j的忍耐值、杀了w个怪的

2016-09-18 11:01:31 2032

原创 01背包与完全背包结合

题目:hdu5410题意:一个物品重量W,告诉你总的物品时数和总钱数。买x个会给a*x+b个蜡烛。问最多可以获得多少个蜡烛。解答:如果每个物品只拿一个,那就给a+b个蜡烛,所以先01背包再完全背包。#include#include#include#include#includeusing namespace std;const int MAXN = 2020;struct

2016-09-15 21:03:39 351

原创 完全背包基础

题目:hdu1114题意:一个背包,求装满状态下能乘的最小价值解答:完全背包~~~//完全背包#include#include#include#include#includeusing namespace std;const int maxn = 550;const int MAXN = 10010;const int INF = 0x3f3f3f3f;struct

2016-09-15 10:50:08 288

原创 01背包变化4

题目:hdu5544题意:给一个长度为L的平台,和n根金条的长度与价值,金条只能在平台上摆一长条,且每根金条的重心不能超出平台边缘。解答:01背包dp加一维表示当前物品与之前物品已经占用了多少个边缘。dp[k][i][v]:第一维:k=0,1,2。0代表没有半截的情况,1代表有1个半截的情况,2代表有2个半截的情况。 第二维:前i物品。 第三位:占了v容量。

2016-09-04 17:17:00 288

原创 01背包变化3

题目:hdu2546题意:电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。解答:如果m#includ

2016-09-02 22:22:40 488

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除