- 博客(9)
- 收藏
- 关注
原创 poj3468(A simple Problem with Integers)(线段树成段增减)
利用懒惰标记使更新延迟到下一次需要更新or询问时。#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>#include <stdlib.h>using namespace std;#define ms(X) memset(X,0,sizeof(X));typedef long long
2016-06-28 21:35:33 257
原创 hdu1698Just a Hook(线段树+懒惰标记)
这是一道成段更新的典型例题。成段更新需要用到懒惰标记。简单来说就是每次更新的时候先不更新到底,用懒惰标记使更新延迟到下一次要更新or询问时。(P.S. 大数据输出和读取不要用cin,cout,今天手残,没事做,tle,tle,。。。)#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>
2016-06-28 20:37:22 492
原创 uva442 Matrix chain multiplication(数据结构)
看错题意,以为是给出如ABCDE然后求出最少的策略使乘积次数最少,直到看了别人的代码才回过神来。 其实这道题就和括号匹配那道题差不多,用栈解决。 由于不会用stl,就直接模拟了。(本来说好要学的,结果考试月到来,加上自己懒,已被同学甩得远远的。 人一我百,人十我万。我会坚持下去的,跪着也要走下去)#include <stdio.h>#include <iostream>#include <
2016-06-28 15:27:46 309
原创 hdu1052(田忌赛马题解)
区间dp 状态转移方程 dp(l,r)=max(dp(l+1,r)+cost(l,k),jdp(l,r-1)+cost(r,k)); cost(t,q)是田忌与齐王比赛一局下来的结果#include <stdio.h>#include <string.h>#include <algorithm>#include <stdlib.h>using namespace std;int dp
2016-06-13 20:15:12 642
原创 hdu1575 Tr A(矩阵快速幂)题解
先写一个矩阵乘法,然后应用快速幂即可#include <iostream>using namespace std;typedef long long ll;ll arr[11][11],n;void quick_multipy(ll a[][11],int p){ ll nres[11][11]={0}; for(int i=0;i<n;i++) for(
2016-06-11 19:54:49 252
原创 hdu5187 zhx's contest题解(快速幂快速积)
公式: ans=2^n-2;(n!=1) 用快速幂快速积即可求得答案 显然n==1时,ans=n%p 当p=2时,由公式ans必为0(当然n!=1)“`include using namespace std; typedef long long ll; ll quick_multify(ll a,ll b,ll p) { ll res=0; a%=p; b
2016-06-11 18:58:37 258
原创 poj 1157 little shop of flowers题解
线性dp 状态转移方程 dp[i][j]=max(dp[i-1][k]+dp[i][j],tmp)(此处k为小于j但大于i-1的任意整数)#include <iostream>#include <algorithm>#include <string.h>#include <stdio.h>using namespace std;int dp[110][110];int main(in
2016-06-09 19:40:34 297
原创 hdu1754 i hate it(题解)
这道题果然是i hate it,虽然是线段树的最最基础题,但我tle了30,40发,debug一个月多才知道tle在哪里。 由于我是用纯C写的,没有max函数,我就自己用预处理宏,写了一个,对,tle就在这里,如果你是用c++里面的max就ac了。 我tle的代码#include <stdio.h>#define mMax(X,Y) ((X)>(Y)?(X):(Y))int tree[800
2016-06-03 21:28:28 497
原创 poj2182 lost cows题解(线段树)
这道题如果思路对了就很简单,倒着读数据,然后这道题维护的是区间上未填充元素的个数。#include <stdio.h>int tree[8010<<2],arr[8010],i,n;void build(int tn,int l,int r){ int mid; tree[tn]=r-l+1; if(l==r) return; mid=((r-l)>>1)+l;
2016-06-03 20:10:26 447
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人