自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

题目实力吊打我,怎么能说我菜

题目实力吊打我,怎么能说我菜

  • 博客(33)
  • 收藏
  • 关注

原创 Codeforces842C dfs+set

题意:有一颗n个点,n-1条边的树,每个点的权值为wi,问从1到每个点,每条路径所经过点的gcd,可以选择将该条路径中某一个点改为0; 思路:dfs是肯定要的,至于set处理看代码吧;#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<map>#include<stack>#includ

2017-08-30 11:03:15 381

原创 Codeforces 842B 简单几何

题意:平面上有一个圆心为原点的圆,半径为r,内圆半径为r-d(题意读错以为d是内圈半径,wa到爆炸),询问n个小圆zi(zi为半径),问有多少个圆完全在外壳内(即完全在圆内,但与内圈无交集); 思路:已知n个圆的圆心xi,yi,可以知道圆心距为sum=sqrt(xi*xi+yi*yi),那么只需要保证sum>=r-d+zi&&sum+zi<=r即为完全在外壳内;#include<iostream>

2017-08-30 10:58:18 386

原创 CodeForces - 27C

题意:再给定的序列中找出一组最短的无序子序列#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<vector>#include<cstdio>#define M

2017-08-23 19:10:34 235

原创 Coderforces 20C 最短路记录路径

题意:给定一个带权无向图。你需要求出从点 1 到点 n的最短路。 思路:使用Dijkstra算法,当进行松弛操作时用数组记录下前缀,输出时先从n向1回溯记录再输出;#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath

2017-08-23 19:07:35 357

原创 poj1942组合数学

题意:给定一个矩阵网格n*m,要从左下角走到右上角,每次只可以往上或者往右走,问有多少种走法; 思路:以为每次只能向上或者向右,那么总共只需要走n+m步,其中n步向上,m步向右,所以我们只需要确定哪几步向上走那么向右的也就确定了。即从n+m步中选出n步向上,即C(n+m,n),组合问题;#include<iostream>#include<algorithm>#include<string>

2017-08-16 12:27:28 394

原创 poj1019组合数学

题意:给定一个序列,问序列第i位数字; 思路:显而易见,在1~9中,序列长度依次增加1,在10~99中,序列长度依次增加2。那么我们可以求出所有num[n](num[n]以数n结尾的序列长度),因为给的条件(1 ≤ i ≤ 2147483647),所以n最大为31269(对所有的num[n]求个和就知道了);具体思路看代码吧;#include<iostream>#include<algorith

2017-08-16 12:21:08 213

原创 poj1850组合数学

题意:给你一个字符串s,输出s在字典序全排列中的位置(从小到大排列)。 思路:长度为m的字符串有C(26,m),这是显而易见的,从26个字母中挑m个,因为要升序排列,所以只有一种排法,即C(26,m)为个数;这样我们就可以求出长度比字符串s小的字符串有多少个。len为字符串s的长度。 长度相同但排在字符串s前面的有多少个?对于 s 的每一位 s[i] 和左边相邻的 s[i-1],如果s[i] >

2017-08-14 20:04:07 296

原创 poj3252组合数学

题意:一个数转换成二进制数,零的个数大于等于一的个数的数称为圆数,例如9转换成1001,0的个数为2,1的个数为2,所以9为圆数;输入两个数start和end,问start到end有多少个圆数。 思路:start到end中有多少个圆数,我们只需要求出num[0,start]和num[0,end),num[0,start]-num[0,end)即为所求; 以二进制数10011000为例,位数为8,

2017-08-14 17:13:06 224

原创 CodeForces - 5C

题意:给定一个由字符 ( 和 ) 组成的字符串。您需要找出它的最长子串,且该子串是一个合格的括号序列。同时,还需要找出这样的子串的数目。(像(),(())样的为合格的括号序列,((()())为不合格); 思路:设dp[i]表示到第i个右括号所获串的长度。则dp[i]=dp[t-1]+i-t+1。t表示离i最近的那个左括号的位置。#include<iostream>#include<algorit

2017-08-12 10:11:20 228

原创 CodeForces 1C

题意:给出正多边形的三个顶点,求正多边形的最小面积; 思路: 海伦公式: p=(a+b+c)/2,S=√p(p-a)(p-b)(p-c)(a,b,c为三角形的三边,S为三角形面积) 1.求外接圆半径r=a*b*c/4S 2.由余弦定理求出三个圆心角num[3] (要注意的是,当三个点在同一段半圆弧上时,这时第三个圆心角应该用2π-num[0]-num[1],防止麻烦直接就令num[2]=2

2017-08-11 20:51:09 358

原创 POJ - 2392 多重背包

题意:有K种块,每种高度为Hi,数量为Ci,拿这K种块去建塔,每种块再塔中所处的高度不能超过Ai,问塔最高能有多高; 思路:首先因为每种块所出的高度不能超过Ai,那么这个塔的最大高度不会超过max(Ai),以max(Ai)为数组大小,为了保持结果能最优应保证Ai小的在下层,所以应该以Ai从小到大排序,之后每次以Ai为背包容量去求解;#include<iostream>#include<algor

2017-08-09 16:36:23 283

原创 POJ - 1276 裸完全背包

题意:要取价值为cash的钱,ATM机里面有N种面额的钱,每种面额为Ni,数量为Di,问最多能取出多少钱(要小于等于cash); 思路:以cash为背包容量,多重背包#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmat

2017-08-09 16:27:42 349

原创 HDU - 2191 裸多重背包

#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<vector>#include<cstdio>#define MAXN 33000#define INF

2017-08-09 16:22:50 181

原创 HDU - 1059 多重背包模板题

题意:有价值为1,2,3,4,5,6的物品,每种物品都有一定数量,问这些物品能不能平分成价值相同的两份; 思路:多重背包模板题,以价值总额的一半为背包容量#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#in

2017-08-09 16:21:26 631

原创 HDU - 1114完全背包模板题

题意:你有一个存钱罐,空的时候质量为E,满的时候为F,你有N种硬币价值为P,质量为W,问把存钱罐状满的最小价值; 思路:完全背包模板题#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stac

2017-08-09 16:18:51 346

原创 zoj3623

#include <stdio.h>#include <string.h>#include <stdlib.h>const int N = 35;const int M = 1000;int n,l;int v[N],w[N];int dp[M];int max(int a, int b) {return a > b ? a : b;}int main(){ int i,j,k

2017-08-09 12:54:31 231

原创 POJ - 2063 完全背包

#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<vector>#include<cstdio>#define MAXN 33000#define INF

2017-08-09 12:47:51 306

原创 POJ - 3260 完全背包和多重背包

题意:农夫约翰要购买价格为T的物品,他有N种硬币,每种硬币的面额为Vi,数量为Ci,同时店主也只有这几种面额的硬币,但数量无限,问约翰总共要经手的硬币数量(约翰买东西给店主的硬币数量+店主找钱给约翰的硬币数量=约翰经手的硬币数量)(约翰是多重背包,店主是完全背包) 思路:我们用约翰所拥有的硬币总额来做背包容量是肯定不行的; 可以注意到,上界为w*w+m(w最大面额的纸币),也就是24400元。(

2017-08-09 11:30:12 1108

原创 POJ - 1787 完全背包,记录路径

题意:你有1,5,10,25四种硬币数量有限,你想买价格为p的咖啡,问你能不能购买,要求花的硬币尽量多,并且输出每种硬币花了多少; 思路:看起来像多重背包加记录路径但用完全背包比较好写#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#inc

2017-08-08 20:40:04 467

原创 POJ - 3181 完全背包

题意:Farmer John 想知道,在一家商品价格为1至K (1 <= K <= 100)的店有多少方法能正好花完他的N(1 <= N <= 1000)元钱 。商品数量充足。 思路:完全背包,dp[j]表示价格为j时花光钱的方法数,所以状态转移方程为dp[j]+=dp[j-i](i为商品价格) 因为方法数过大超longlong了,所以开两个longlong数组将大数存下;#include<io

2017-08-08 20:34:03 254

原创 UVA - 147 完全背包

#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<vector>#include<cstdio>#define MAXN 33000#define INF

2017-08-08 20:25:44 196

原创 UVA - 674 完全背包

题意:50,20,10,5,1这5种硬币,输入一个金额,用着5中硬币去凑成这个金额,问有多少种组法。 思路:完全背包模板题#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#in

2017-08-08 20:22:03 233

原创 hdu3466(01背包,贪心)

题意:给你一些钱 m , 共有 n 件物品,每件物品有价格 P,价值 V,还有一个很特别的属性 Q, Q 指你如过想买这件物品你的手中至少有这钱Q 。虽然你只要花费钱P,但你的手中至少有钱Q,如果不足Q,不能买。问给你钱M ,列出N件物品,最多能获得多少价值的东西。 思路:如果没Q的限制条件,这道题就是01背包水题。当我们要购买第i件物品,我们已经花费了j-p[i],我们剩余的钱为m-(j-p[i

2017-08-07 11:22:05 379

原创 POJ - 2923 (01背包,状态压缩)

题意:有n件物品,每件容量为wi,有容量分别为c1,c2的两辆车,问最少要几次才能将这些物品运完; 思路:先用状态压缩将一次能运走的物体压缩成一个状态,将问题转换成01背包;#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<

2017-08-07 11:06:20 324

原创 HDU - 2639 (01背包)

题意:01背包,要求第k优解; 求第k优解就好比要比较两个班的前十名推出全年级全十,需要将选与不选所有的结果记下来比较;#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#inc

2017-08-07 10:39:29 239

原创 HDU - 2955 (01背包)

题意:Roy想要抢劫银行,每家银行多有一定的金额和被抓到的概率,知道Roy被抓的最大概率P,求Roy在被抓的情况下,抢劫最多。 思路:由于概率不是整数,所以不能以概率为背包容量,我们以金额为背包容量,dp[i]意义为当抢劫金额为i是被抓概率最小(我们将概率p转换为1-p,求其最大);#include<iostream>#include<algorithm>#include<string>#i

2017-08-07 10:16:29 167

原创 UVA - 562(01背包)

题意:给定n个硬币,要求将这些硬币平分以使两个人获得的钱尽量多,求两个人分到的钱最小差值。 思路:先将所有硬币的总额算出来为sum,以sum/2为背包容量,算出dp[sum/2],然后abs(sum-2*dp[sum/2])就是最小的差值;#include<iostream>#include<algorithm>#include<string>#include<cstring>#inclu

2017-08-06 16:32:57 233

原创 UVA - 624 (01背包,记录路径)

简单的01背包,可以用笨方法记下路径 代码如下:#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<vector>#include<cstdio>#defin

2017-08-06 16:17:32 259

原创 HDU - 2546 01背包

01背包的变形,因为当剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负;那么我们只需要一开始将余额减去5,将价值最大的物品拿出,然后求出当此时所能购买的最大价值,再用m+5减去最大价值和价值最大的物品就得出最后的答案了;#include&lt;iostream&gt;#include&lt;algorithm&gt;#include&lt;string&gt;#includ...

2017-08-06 16:09:08 191

原创 POJ - 3624 01背包

典型的01背包#include#include#include#include#include#include#include#include#include#include#define MAXN 33000#define INF 0x3f3f3f3f#define lmid l,m,rt<<1#define rmid m+1,r,rt<<1|1#define l

2017-08-06 15:59:30 192

原创 HDU - 2602(01背包)

典型的01背包#include#include#include#include#include#include#include#include#include#include#define MAXN 33000#define INF 0x3f3f3f3f#define lmid l,m,rt<<1#define rmid m+1,r,rt<<1|1#define l

2017-08-06 15:56:13 172

转载 HDU 6069 Counting Divisors(素数筛法+枚举+技巧)——2017 Multi-University Training Contest - Team 4

传送门 Counting DivisorsTime Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 741    Accepted Submission(s): 248Problem Description

2017-08-04 12:57:19 281

转载 POJ3579 Median(二分答案 + O(N)判定)

出处:http://blog.csdn.net/gengmingrui/article/details/47671265传送门 大意:给出N个数,对于存有每两个数的差值的序列求中位数,如果这个序列有偶数个元素,就取中间偏小的作为中位数。因为N=100000,所以想要求出每一个差值是不可行的,我们很容易想到二分答案。 在二分答案时我们会进行判定,求出小于等于枚举值的个数,

2017-08-03 11:56:39 300

空空如也

空空如也

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

TA关注的人

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