![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
文章平均质量分 68
BinJourney
这个作者很懒,什么都没留下…
展开
-
HDU 1024 Max Sum Plus Plus
用long long竟然会超时思路参考kuangbin的因为n有1000000,可以用滚动数组然后dp[i][j]表示选取第i个数,分成j组时的最大值然后这里有一个比较独特的思路一般的思路都是该数选或不选这两个状态,而这里不需要不选这个状态,不选的状态可以由还要注意一点,这里i//以前做过一些dp的题目,但都是一些很难的,基础没打好来,回来好好做一些基础dp//其实做原创 2015-04-22 14:36:27 · 527 阅读 · 0 评论 -
HDU 3535 AreYouBusy
分组背包最多取一个的组,则对于该组来说,每一个状态只可能由前一组的状态过来,分不取和取两种至少取一个,则没了不取的选择,即没有dp[i][j]=dp[i-1][j]的递推式任意取,即01背包,取法包括由前一组不取或取一个,或由该组取一个dp[i][j]表示前i组,消耗j时间所能取得的最大值初值赋为-1,表示该状态不可达,对于dp[0],初值赋为0,即什么都没有的时候最大的快乐值原创 2015-06-04 22:22:15 · 604 阅读 · 0 评论 -
dp基础小结
kuangbin带你飞系列,基础dp链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966总共20多道题,就不一一说了说一下学会的关键的思路第1点:有的时候某一状态的值的得出,可能会要我们枚举已经计算过的值,一一比较取最值,但如果真的去枚举的话就会超时,这时我们可以把状态的含义设为前i项的最值,计算的时候只需要多原创 2015-05-12 19:51:52 · 684 阅读 · 0 评论 -
POJ 2576 Tug of War
刚开始一直在纠结怎么记录人数,因为一开始的想法是dp[i][j]表示前i个人是否能达j这个值,想过用状态压缩存储路径,然后发现状态压缩只适合在人数然后考虑到空间复杂度,省略i这个状态,用逆序保证每个人只选一次#include #includeint dp[105][45005],w[105];int n;void init(){ memset(dp,0,sizeof(dp));原创 2015-05-17 23:42:21 · 968 阅读 · 0 评论 -
POJ 3616 Milking Time
给出n是用来误导人的。直接排序之后,对于每个区间,枚举其前面的区间#include#include#includeusing namespace std;struct Node{ int x1,x2,val,ans;}dp[1005];//dp[i].ans:到第i个区间结束时到取得的最大值 int n,m,r;int cmp(Node a,Node b){ retur原创 2015-05-10 23:43:16 · 304 阅读 · 0 评论 -
HDU 3496 Watch The Movie
/*n个里选m个,把m也看作一个背包,共有m个可以用但用[n][m][l]表示数组太大,可以考虑去掉[n],因为dp过程不断取最大值就可以了,[n]其实不需要dp[i][j]:用i部动画,j时间能取得的最大值dp[i][j]=max{dp[i-1][j-t[k]]+v[k]}*/#include#include#define N 105#define L 1005const原创 2014-11-09 17:06:55 · 334 阅读 · 0 评论 -
A + B Problem II
#include#includechar a[1005],b[1005];int c[1005];int Add() {int i,j,k,s,post=0;i=strlen(a)-1,j=strlen(b)-1;if (ielse k=i+2;c[k+1]=30;for(;i>=0 || j>=0;i--,j--,k--) {s=0;if (i>=原创 2014-09-28 22:38:13 · 347 阅读 · 0 评论 -
POJ 2528 Mayor's posters
也是区间更新,但这道题数据范围太大,要离散化离散化即把涉及到的数字都记录下来,重新排过序后再用记录下来的下标作为其值,当使用其值进行比较时就可以根据下标找到对应的值这里用了set判重,set是用insert插入的,而queue和stack都是用push插入值#include#include#includeusing namespace std;#define N 10005s原创 2015-05-15 17:47:36 · 554 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers
区间更新和查询区间更新要延迟更新,就是当某结点完全处于要更新的区间之中时,我们只更新到该结点,并把其子结点要更新的值记录在本结点,当要向下更新或查询时再进行更新#include#include//typedef long long ll;typedef __int64 ll;#define N 100005struct Node{ int l,r; ll sum,add;}原创 2015-05-15 17:44:22 · 572 阅读 · 0 评论 -
HDU 1166 敌兵布阵
线段树水题,练习一下线段树的写法虽然我的写法和网上大多数的写法不同,但感觉我这种写法更好理解,写起来也更简便单点更新#include #define N 50005struct Node{ int l,r,sum;}t[N<<2];int n;void build(int cur,int l,int r){ t[cur].l=l; t[cur].r=r; t[cur]原创 2015-05-15 17:42:38 · 766 阅读 · 0 评论 -
HDU 1754 I Hate It
线段树水题,复习一下线段树#include#include#includeusing namespace std;#define N 200005struct Node{ int l,r,num,ma;}node[N*4];void build(int p,int l,int r){ node[p].l=l; node[p].r=r; node[p].num=0; no原创 2015-05-02 21:56:20 · 429 阅读 · 0 评论 -
HDU 5091 Beam Cannon
复习了一下线段树,才发现线段树还是做的太少了,好多都忘了线段树主要有以下功能:RMQ,区间总和查询,单点更新,区间更新都忘了区间更新时要延迟更新了,这里一开始WA了。再说说这题的思路:把每个点作为矩形的左下角,画出所有矩形,以被矩形覆盖次数最多的区域中的任一点作为矩形的右上角,即为我们要求的矩形。也就是说,我们要求的是被矩形覆盖次数最多的次数,这样用扫描线就可以解决,但直接扫描原创 2015-05-02 21:48:01 · 568 阅读 · 0 评论 -
poj1177 Picture
基本上照抄的,学习一下扫描线的线段树#include#include#include#includeusing namespace std;typedef long long ll;struct Line{ int x,y1,y2,flag;};/********************************** l-左子树节点 r-右子树节点* num原创 2015-02-18 11:22:02 · 513 阅读 · 0 评论 -
poj2991 crane
昨晚上poj进不去,今天补上线段树+计算几何问题原创 2014-10-29 10:42:09 · 504 阅读 · 0 评论 -
poj 2431 Expedition
解法在注释里/*这道题表面上看起来很复杂,对于每个加油站都要选择是否要加油但可以注意到,每到一个加油站,只要汽车还有油,对于加油和不加油的两种选择,接下来的解法都是一样的这也就导致了这道题可以用贪心来做做法:到加油站的时候都暂时不加油,等汽车没油了,再从已经经过的加油站里选一个油量最大的,因为数据比较大,直接比较会超时,所以用优先队列*/#include#include#inc原创 2014-11-01 01:02:35 · 351 阅读 · 0 评论 -
SPOJ QTREE Query on a tree
树链剖分把边权的模板也敲了一下关键在于弄明白点和边的对应关系#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define out(x) cout<<#x<<": "<<x<<e原创 2015-06-04 22:12:10 · 482 阅读 · 0 评论 -
HDU 3966 Aragorn's Story
把树链剖分搞了一下,树链剖分就是把某树按重链和轻链映射到某一线性的数组上去,这样对于某条路径的查询和修改就变成了树状数组和线段树的事了。这道题在HDU上要加个爆栈的,而且还要用c++,g++也会栈溢出#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#inc原创 2015-05-31 20:39:23 · 412 阅读 · 0 评论 -
博弈 单堆石子的动态规划实现
很简单的DP//单堆石子的动态规划解法#include#include//输入int X,K,A[MAX_K];//动态规划所有的数组bool win[MAX_X+1];void solve() { win[0]=false; int i,j; for(j=1;i<=X;j++) { //如果可以让对手到达必败态,则必胜 win[j]=false; for(i原创 2014-11-07 12:54:27 · 392 阅读 · 0 评论 -
zoj 2060 Fibonacci Again
很简单的题目:只需要运用(a+b)%n=(a%n+b%n)%n原创 2014-11-09 20:20:39 · 380 阅读 · 0 评论 -
POJ 2283 Different Digits
一个数论中的结论:对于任意的整数n,必然存在一个由不多于两个的数来组成的一个倍数。因为a,aa,aaa……取n+1个,则必有两个模n余数相同,相减即得n的倍数m。而m只由a、0组成。原理好#include#include#include#include#define maxn 65540using namespace std;int n,m,mcnt,tcnt,h;int原创 2014-11-08 21:57:51 · 680 阅读 · 0 评论 -
POJ 1426 Find The Multiple
/*这道题要解决的一个问题就是当数字太大的时候int存下了,不能直接进行模运算可以用这个公式: (a*b)%n=(a%n * b%n)%n (a+b)%n=(a%n + b%n)%n*/#include#include#includeusing namespace std;typedef struct { int mod; string ans;}Node;N原创 2014-11-08 17:56:48 · 301 阅读 · 0 评论 -
POJ 2769 Reduced ID Numbers
/*用visited数组来判断是否同余,每次计算完要记得重置,重置时不能用memset,会超时因为n<300,可以考虑建一个索引数组set,每次记录位置*/#include#include#define N 1000005int a[305];int visited[N];int set[305];int n,m;void clear() { int i; for(i=0原创 2014-11-08 17:39:32 · 451 阅读 · 0 评论 -
湖南邀请赛选拔赛
A题:签到题:#includeconst double eps=1e-8;int main(){ //freopen("in.txt","r",stdin); int T; double m,h; scanf("%d",&T); while(T--){ scanf("%lf%lf",&m,&h); double ans=m/(h*h); if(ans<18.5原创 2015-05-10 19:34:13 · 512 阅读 · 0 评论 -
JXUFE_上海邀请赛选拔赛
总的说一下这次的情况,这次的状态不太好,期间各种小错误卡好久,freopen()不能用,也是醉了,A题题目描述有问题,就不说了,B题少考虑一种情况,G题把Yes输成YES,I题思路一直有啊,但当时一直混混沌沌的,代码写不出来,J题少写了个break,这么多低级错误,害我卡了好久,还好最后一小时的时候感觉渐渐回来了,一个个的BUG调出来了比赛的时候卡水题真的是巨影响心情的链接:http://原创 2015-05-04 10:22:01 · 726 阅读 · 0 评论 -
水题集
刻苦练习CCFhttp://acm.csu.edu.cn/OnlineJudge/problem.php?id=1585就是旋转一下,找对应关系,注意这里枚举的顺序按原来顺序来,然后输出的时候把n和m的内外顺序换一下#include int a[105][105],b[105][105];int main(){ #ifndef ONLINE_JUDGE freopen("in.原创 2015-05-02 22:35:45 · 420 阅读 · 0 评论 -
HDU 1029 Ignatius and the Princess IV
水题啊,说好的dp呢刚开始的想法是hash,但题目数据范围没给出来。一直在想怎么用dp然后看了看解题报告,解法太简单了,因为一定有某数出现次数比其他所有的数出现次数加起来都大,所以用个计数器互相抵消就可以了。#includeint main(){ #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int n;原创 2015-04-23 14:28:50 · 660 阅读 · 0 评论 -
HDU 5090 Game with Pearls
直接贪心就可以了,接收的时候把0都加上k,每次从最小的数开始找,如果有多个相同的,那么保留一个,其他的都加上k#include#includeusing namespace std;int a[105];int main(){ #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int T,n,k; scanf("原创 2015-05-02 22:45:51 · 702 阅读 · 0 评论 -
2013湘潭赛
XTU1168 Alice and Bob因为数据只有10000范围,直接递推就可以了#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define out(x) cout<<#x<原创 2015-06-03 22:21:01 · 458 阅读 · 0 评论 -
2015上海邀请赛
这次上海邀请赛差一点就能拿到牌子了,好可惜。。。。。Game回来写了下,刚开始把重链写成了最大权子树,无限WA,然后一直在调。。。。。发现我一旦提交上去错了就始终在找程序BUG,从来没想过是不是思路哪里错掉了。。。。其实这种交上去WA之后应该先去找思路上的错误,而不是怀疑题目有陷阱什么的。。。#include#include#include#include#include#i原创 2015-06-02 10:02:23 · 1129 阅读 · 0 评论 -
2014湘潭赛
A题:第一次碰见这种卡常数的题。。。。。刚开始用的long long发现还是不够,然后找了个大数模板接下来就无限TLE,然后各种优化。。。。。总结了下大数运算的几个优化要点一、能不能大数的地方尽量少用大数二、大数的数组开到够用就行,不要开太大还有就是这道题的一个优化,暴力求前半部分的时候,可以把临界的数适当取大一点/* * Author: lj940原创 2015-05-28 08:08:09 · 680 阅读 · 0 评论 -
2015浙江省赛
ZOJ 3872 :Beauty of Array 对于每个数,计算这个数被累加的次数。找到这个数左边这个数出现的地方,在这之间的所有数的数量*这个数后面的数的数量,即为这个数被计算的次数#include#includetypedef long long ll;int a[1000005],post[1000005];int main(){ #ifndef ONLINE_J原创 2015-05-11 14:59:43 · 597 阅读 · 0 评论 -
HDU 5015 233 Matrix
上次西安网络赛的题了刚开始始终构造不出递推矩阵,后来想通了。。当我们存放递推值的矩阵是竖条的时候,我们要把该矩阵放在乘法的右端,而横条的时候放在左端。。。根据矩阵乘法的原理,这样构造递推矩阵的时候就非常简单了,把对应值放上去就行了。。。#include #includeusing namespace std;typedef long long ll;typedef vector原创 2015-05-17 22:49:53 · 441 阅读 · 0 评论 -
CodeForces 450B Jzzhu and Sequences
最近在学习矩阵快速幂,以前还觉得快速幂挺难写的,现在看来真的是好简单了。。毕竟以前菜把我们要递推的数放在一个矩阵里,然后构造一个递推矩阵进行矩阵乘法。。。#include #includeusing namespace std;typedef long long ll;const int mod=1e9+7;typedef vector vec;typedef vector m原创 2015-05-17 22:46:59 · 419 阅读 · 0 评论 -
ACM 组队经验谈
转自爱神博客:http://blog.csdn.net/acm_cxlove/article/details/7893769§序章——团队!ACM不是一个人的战斗§上篇——合理分工,演好自己的角色§下篇——队友齐心,其利断金§番外——深呼吸§尾声——信任与成功这个世界上大牛无处不在大牛的形成无非三种: 天赋异禀 勤奋过转载 2015-04-02 19:00:29 · 489 阅读 · 0 评论 -
ACM计算几何题目推荐
//第一期计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板很重要,模板必须高度可靠。3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面大部分是模板。如果代码一片混乱,那么会严重影响做题正确率。4.注意精度控制。5.能用整数的地方尽量用整数,要想到扩大数据的方法(扩大一倍,或扩大sqrt2)。因为整数不用考转载 2014-12-04 10:22:15 · 366 阅读 · 0 评论 -
HDU 5036 explosion
把每个门的开门顺序排列一下,原创 2014-11-08 17:22:31 · 563 阅读 · 0 评论 -
迷宫的最短路径
/*虽然在网上找不到题目,但这题实在是太经典了,好多搜索题目都是从它变形来的从S走到G,'#'不能走测试数据10 10#S######.#......#..#.#.##.##.#.#........##.##.####....#....#.#######.#....#......####.###.....#...G#*/#include#include#i原创 2014-11-12 23:42:33 · 659 阅读 · 0 评论 -
poj 2386 Lake Counting
#include#define MAX_N 105#define MAX_M 105int N,M;char field[MAX_N][MAX_M+1]; //园子//现在位置(x,y)//每一次dfs把一堆水变为'.'void dfs(int x,int y) { //将现在所在位置替换为 field[x][y]='.'; //循环遍历移动的8个方向 3*3-(0,0)刚好原创 2014-11-12 23:13:21 · 361 阅读 · 0 评论 -
POJ 3666 Making the Grade
刚开始想到要把结果作为状态,但a[i]的取值范围太大,所以一直没想出来,然后搜了个解题报告,看到要离散化,于是又回来想。最后设了个自己都不太确定思路有没有问题的状态,抱着试一试的心态提交上去,然后就A了,也是醉了dp[i][j]:前i个数,前j个高度的最小值#include#include#include#includeusing namespace std;const in原创 2015-05-12 19:50:51 · 607 阅读 · 0 评论 -
HDU 2859 Phalanx
刚开始状态设错了,还添加了个长度的标志位,其实这个完全不用加的,直接作为值就可以了。dp[i][j]:以s[i][j]作为左下角的最大长度这道题按最坏情况算的话,应该是要超时的,但考虑到数据的随机性,超时的可能性还是不太大的#include#include#includeusing namespace std;char s[1005][1005];int dp[1005][1原创 2015-05-10 12:58:00 · 649 阅读 · 0 评论