小白书
阿狸是狐狸啦
这个作者很懒,什么都没留下…
展开
-
UVALive 2757
n个商品,每个商品有一个保质期和利润,每个需要一天卖出,最终获得的利润最大是多少。价格从大到小排序,看商品i的保质期之前是不是有一天是空闲的,如果是那就把它加入。#include #include #include #include using namespace std;struct node{ int w,d;}a[13023];int cmp(node q,node原创 2017-10-23 21:36:24 · 198 阅读 · 0 评论 -
UVA - 10859 (树形dp,一个变量维护两个值)
题意:给你一个森林,每个点可以放一台灯,这台灯会照亮和它相邻的边,然你求最少安装几台灯能照亮所有的边,并且保证灯的数量最少的情况下,被两台灯同时照亮的路尽可能多,输出灯的数量,同时被两台灯照亮的边数,被一台灯照亮的边数。思路:很明显的树形dp,我们先考虑让灯最少的情况。用dp[i][0]表示当前节点没有灯,并且他相邻的边都有灯照亮所需灯的最小值。用dp[i][1]表示当前节点有灯,并且他相邻的...原创 2019-01-18 11:58:59 · 191 阅读 · 0 评论 -
UVALive - 4987 (dp+贪心)
题意:n个施工队,m个避难所,在一个正x坐标轴上,给出每个施工队坐标和每个避难所坐标,要求每个施工队到一个避难所避难,且每个避难所至少有一个施工队,求所有施工队所走的距离和的最小值。题解:先把施工队和避难所排个序,可以设状态dp[i][j]表示前i个施工队用j个避难所的最小花费。容易得出第i个施工队到第j个避难所造成的花费是最小的。即dp[i][j]=min(dp[i-1][j-1],dp...原创 2018-07-18 17:59:05 · 219 阅读 · 0 评论 -
UVALive4015(树形dp)
题意:给一棵树,每条边有边权,有Q次询问,求从根节点出发,走不超过x单位距离,最多经过多少个点。题解:设置一个三维的状态dp[i][j][1],表示以i节点为根的子树,经过j个节点,然后回到i节点的最小花费.dp[i][j][0],表示以i节点为根的子树,经过j个节点,然后不回到i节点的最小花费.剩下的是一个简单的dfs。#include <bits/stdc++.h&...原创 2018-07-18 15:16:58 · 145 阅读 · 0 评论 -
UVALive - 4394 (区间dp)
题意:给出两个字符串;每次可以选择第一个字符串的一个区间,全部刷成某一个字母;问最少刷几次可以刷成第二个串。题解:假设a是一个空串,设dp[i][j]为把空串a的【i,i+len-1】位置刷成b串【i,i+len-1】,需要刷几次。其中len为我们当前子串的长度。可以得到当b[i]等于中间某个位置b[j]时dp[i][i+len-1]=min(dp[i][i+len-1],...原创 2018-07-18 11:23:40 · 177 阅读 · 0 评论 -
LA2678 最短子序列 ( 从O(n^3)到O(n) )
小白书49页题意: 给你一个正整数序列,问你在里面找到一个最短的子序列,要求子序列的和大于等于k,输出序列长度。1:很容易想到n三方的暴力,枚举序列左右端点,然后算和。2:我们可以预处理前缀和,然后程序复杂度就变为O(n^2)3:我们可以枚举右端点,然后二分左端点,然后复杂度变为O(nlogn)#include #include #include #incl原创 2018-01-31 10:56:45 · 573 阅读 · 0 评论 -
UVA - 1252 Gym - 100676G (状压dp)
题意:给你n个长m的不相同的0,1字符串,代表n个人对m个问题的不同回答,问你至少问几个问题可以知道是哪一个人。dp[i][j]表示问题串为i且答案为j时能否区分所有人。 #include <stdio.h>#include <algorithm>#include <iostream>#include <string.h>usi...原创 2017-11-25 13:47:17 · 185 阅读 · 0 评论 -
UVALive - 4123 Glenbow Museum
题意:O代表90度,R代表270度,给你一个n问你存在多少长度为n的串,串可以组成一个封闭的多边形。如n=4时序列只能是OOOO,即一个四边形。当n=6时满足题意的序列有RRRRRO,RRRROR,RRRORR,RRORRR,RORRRR,ORRRRR.思路:再看了好多题解加一晚上时间的理解后写了一些自己的理解通过观察我们可的R的数量总比O多4个。那么最多有4对RR,且没有原创 2017-12-21 22:14:32 · 194 阅读 · 0 评论 -
UVALive - 3363 String Compression (区间DP)
给你一个字符串,让你把它压缩,比如gogogo可以压缩成3(go),letsgogogoletsgogogo可以压缩成2(lets3(go)),然后问你压缩后的最短长度。典型的区间dp递推方程:dp[j][i]=min(dp[j][i],dp[j][k]+dp[k+1][i]);dp[j][i]=min(dp[j][i],dp[j][j+k-1]+2+get(tmp));#in原创 2017-11-25 12:33:19 · 164 阅读 · 0 评论 -
UVALive - 4794 (状压枚举子集)
题意:给你一块x*y的巧克力,n个面积a[i],每次只能横着或者竖着切一次,问你是否能切出来n块面积为a[i]的巧克力。思路:n为15,可以想到状压所有状态,然后记忆化搜索,设立状态d[x][s],sum[s]表示集合为s的巧克力面积和就是当前要切的巧克力的面积,x表示当前要切的巧克力的长和宽的最小值,那么我们就知道当前巧克力的长和宽,当前状态向下转移时有两种方式,一种是把长分为两部分,一种是...原创 2019-01-18 17:39:25 · 134 阅读 · 0 评论