水题
Lzed
我好菜啊
展开
-
UVALive3902-Network(dfs)
题目链接http://vjudge.net/problem/UVALive-3902思路先无根树转有根树,然后可以贪心 对于深度大于k的节点,选择深度最深的节点,向上走k步走到节点A,那么将节点A作为一个新的server一定是最优解,然后删去以节点A为根的子树,继续上述过程代码#include <iostream>#include <cstring>#include <stack>#incl原创 2016-11-08 16:38:41 · 263 阅读 · 0 评论 -
<Leetcode> 1. Two Sum
题目链接https://leetcode.com/problems/two-sum/思路用unordered_map将序列hash,然后对于每个数,O(1)的去查找 时间复杂度:O(N)代码class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<in原创 2016-11-16 20:55:01 · 218 阅读 · 0 评论 -
Codeforces743C-Vladik and fractions(构造)
题目链接http://codeforces.com/contest/743/problem/C思路要使2n=1x+1y+1z\frac{2}{n} = \frac{1}{x} + \frac{1}{y} + \frac{1}{z}且x≠y≠zx \neq y \neq z 那么我们可以考虑令z=nz = n 接下来就只需要构造1n=1x+1y\frac{1}{n} = \frac{1}{x} +原创 2016-12-17 23:35:15 · 340 阅读 · 0 评论 -
Leetcode 118 - Pascal's Triangle(模拟)
题意给定n,生成n行的Pascal三角形。思路a[i,j]=a[i−1,j−1]+a[i−1,j]a[i, j] = a[i - 1, j - 1] + a[i - 1, j]。边界情况特判一下就好。代码class Solution {private: vector<vector<int>> pas; public: vector<vector<int>> generate(i原创 2017-02-17 16:26:06 · 284 阅读 · 0 评论 -
Leetcode 441 - Arranging Coins(Math)
题意给出一个n,然后我们去1,2,3…的使用n。问做多能多少次(如果最后一次不够的话就不计入结果)思路算法1满足的条件是:k(k+1)2≤n\frac{k(k+1)}{2} \leq n的最大k。本来想二分一下k。然后判断。但是,从上面那个式子我们可以知道:k(k+1)≤2nk(k + 1) \leq 2n。即我们k≤2n−−√≤k+1k \leq \sqrt{2n} \leq k+1。于是我们对2原创 2017-02-11 22:24:58 · 178 阅读 · 0 评论 -
Leetcode 343 - Integer Break(暴力)
题意给定一个整数n(2≤n≤582 \leq n \leq 58),将n拆成至少2个数,使这些数乘起来的积最大。思路首先,2,3的返回值要单独判断(因为2,3拆了后反而更小, 但是题目要求必须拆出来2个数)然后,我们设d[i]为数i能够得到的最大积。我们再预处理d[2] = 2, d[3] = 3。然后从4开始循环到n,对每个数i,有d[i]=max(d[i],d[j]∗d[i−j])1≤j<id[原创 2017-01-23 16:55:25 · 186 阅读 · 0 评论 -
Leetcode 377 - Combination Sum IV(DAG上的dp)
题意给定一个数n和一个数组nums,要求用nums内的数去组成n,问多少种解法。顺序不同也算新的解法。思路其实就一DAG上路径统计问题 我们可以这样考虑:把0到target上的每个值看做一个点,如果能够从点A到点B的话, 我们就相当于可以连一条边,从点A到点B能够连边的充要条件是nums内存在一个数是B-A的值。然后就成了DAG上路径统计问题了。我们这样定义状态:d[j],当前需要凑出来的钱是j的原创 2017-01-24 15:33:56 · 229 阅读 · 0 评论 -
Leetcode122 - Best Time to Buy and Sell Stock II (dp)
题意给定一个股票的价格序列,你可以进行多次交易,在一天选择买入并在之后的某一天卖出,求能获得的最大利润。 要求:当买入一个股票时候不能买入新的股票思路一个多阶段决策问题,我们用d[i][0]d[i][0]表示我们第i天不持股,d[i][1]d[i][1]代表第i天持股,然后可以得到我们的转移方程: d[i][0]=max(d[i−1][0],d[i−1][1]+a[i])d[i][0] = ma原创 2017-01-28 18:02:05 · 232 阅读 · 0 评论