09 2016 档案
摘要:题意: 思路: DP f[i][j]表示把i到j变成回文串的最少代价f[start][end]=f[start+1][end]+min(node[a[start]].del,node[a[start]].add);f[start][end]=min(f[start][end],...
阅读全文
摘要:思路: f[i][j][k]表示i所学校 前j题 解出了k道 初始化f[i][0][0]和f[i][1][0] f[i][j][k]=f[i][j-1][k-1]a[i][j]+f[i][j-1][k](1-a[i][j]);这个时候f[i][n][k]表示第i所学校做出k道题的...
阅读全文
摘要:坑: 这道题的坐标轴跟普通的坐标轴是不一样的……此题的坐标轴 标号是在中间的……线段树建树的时候就不用[l,mid][mid,r]了(这样是错的) 直接[l,mid][mid+1,r]就OK了Discuss里面的人们很纠结啊…….//By SiriusRen#include #in...
阅读全文
摘要:题意: 思路: 线段树求矩形面积的并。。。同 POJ 1151//By SiriusRen#include #include using namespace std;#define N 88888int n,u,tot,xx,yy,h[N];long long ans;struc...
阅读全文
摘要:题意:求矩形面积的并 思路: 注意是[l,mid][mid,r] 这是真正的线段了 就当扫描线模板使吧~//By SiriusRen#include #include #include #include using namespace std;#define eps 1e-5in...
阅读全文
摘要:思路: 1.线段树 逆着插入就OK了 2.块状链表 (可是我并不会写)//By SiriusRen#include #include #include using namespace std;int n,xx,tree[1000050],cnt[1000050];struct ...
阅读全文
摘要:标号 搜 完了……//By SiriusRen#include #include #include #include using namespace std;int n,t,xx[]={1,-1,0,0,0},yy[]={0,0,1,-1,0},map[666][666],vis...
阅读全文
摘要:5分钟写完 水水更开心//By SiriusRen#include #include #include using namespace std;int m,t,u,f,d;char jy;int main(){ scanf("%d%d%d%d%d",&m,&t,&u,&f...
阅读全文
摘要:思路: 1.枚举第一行 递推剩下的 判断最后一行成不成立 2. (误)高斯消元? 如何判断1最少和字典序最小… (所以这种做法好像不可取)//By SiriusRen#include #include #include using namespace std;int n,...
阅读全文
摘要:思路: 1.DP f[i][j]:前i个数 最后一个数是j的最小花费 f[i][j]=min(f[i][j],f[i-1][k]+(a[i]!=j));1#include #include using namespace std;int n,a[55555],f[55555][2]...
阅读全文
摘要:思路: 线段树 (分类讨论)此题数据很水 数据很水 数据很水 但是卡个暴力还是没问题的……//By SiriusRen#include #include using namespace std;#define maxn 1500000#define inf 10611...
阅读全文
摘要:枚举两点,算一下斜率 sort一遍 判个重 输出解 25行 搞定…//By SiriusRen#include #include #include using namespace std;int n,top,ans;double x[205],y[205],s[40005],t...
阅读全文
摘要:lazy写崩了…….查了好久/* U—> [l,r]–>1 I—> [1,l-1] [r+1,+无穷] –>0 D—> [l,r]–>0 C—> [1,l-1] [r+1,+无穷]–>0 xor[l,r] S—> [l,r]–>xor *///By SiriusRen#...
阅读全文
摘要:权值为1~3 好了 此题是水题…… i表示到了第i个数,j表示结尾的数是j f[i][j]=min(f[i][j],f[i-1][k]+(a[i]!=j)) 1#include #include using namespace std;int n,a[33333],f[333...
阅读全文
摘要:自从某次考试写线段树写挂了以后 这是第一次写线段树,,,,,,这是一个伤心的故事…… 题意: 思路: 标记 维护从左到右的最大值 从右到左的最大值 区间内的最大值……然后就一搞 就出来了//By SiriusRen#include using namespac...
阅读全文
摘要:从1节点最短路,,然后再乘一下权值就OK了//By SiriusRen#include #include #include #include using namespace std;#define N 132000long long d[N];int n,m,first[N],ne...
阅读全文
摘要:这道题我拖了半年,,,终于写出来了 思路: 先反向建边 从终点做一次最短路 —>这是估价函数h(x) 再正常建边,从起点搜一遍 (priority_queue(h(x)+g(x))) g(x)是已经走过的。。思路比较简单,,, 但是我总是MLE原因:写挫了……刷了三页… ...
阅读全文
摘要:按照题意模拟就OK了//By SiriusRen#include #include #include using namespace std;int n,t,a[1005];int main(){ scanf("%d%d",&n,&t); for(int i=1;ima...
阅读全文
摘要:黑书原题 区间DP,递归输出 不看Discuss毁一生 (woc还真有空串的情况啊)//By SiriusRen#include #include #include using namespace std;int n,f[111][111];char s[111];voi...
阅读全文
摘要:方法一: 二分我们可以知道 最长上升子序列的 最后一个数的值是随序列的长度而递增的 (呃呃呃 意会意会) 然后我们就可以二分找值了(并更新)//By SiriusRen#include #include #include using namespace std;int n,...
阅读全文
摘要:匈牙利算法 裸题//By SiriusRen#include #include #include using namespace std;int n,p[8085],first[8888],next[8888],v[8888],tot,vis[8888],m,xx,yy,ans;v...
阅读全文
摘要:题意: 思路: i表示到了i,j表示疲劳度为j f[i][j]表示能跑的最大距离 f[i][j]=f[i-1][j-1]+a[i] if(i-j>=0)f[i][0]=max(f[i][0],f[i-j][j]); f[i][0]=max(f[i][0],f[i-1][0]);/...
阅读全文
摘要:题意: 思路: 二分+Disjktra二分一个值 如果某条边的边权比它小,则连上边权为0的边,否则连上边权为1的边最后的d[n]就是最小要免费连接多少电话线。//By SiriusRen#include #include #include #include using nam...
阅读全文
摘要:题意: 思路:dp[i][j] 表示前i + 1个数变成单调且最后一个数是B[j],此时的最小成本dp[i][j] = min(dp[i – 1][k]) + |A[i] – B[j]| 【k = 0->j】但是我们发现现在的复杂度是O(n^3) 卡不过去怎么优化呢...
阅读全文
摘要:题意: 思路: f[i] = min(f[j]) + 1; 2 * a #include #include using namespace std;int n,l,A,B,tot=1,xx,yy,f[1000050];struct Node{int x,y;}node[1050...
阅读全文
摘要:竟然自己想出转移方程了 (吃鲸)(这是水题(尴尬))题意: 思路: i表示第i个苹果,选了m-j+1次 初始化 f[i][m+1][0]=f[i-1][m+1][0]+(a[i]==1); f[i][m+1][0]=f[i-1][m+1][0]+(a[i]==1); 转移 f...
阅读全文
摘要:题意:给你n个派,每个派都是高为一的圆柱体,把它等分成f份,每份的最大体积是多少。 思路: 明显的二分答案题…… 注意π的取值… 3.14159265359 这样才能AC,,,//By SiriusRen#include using namespace std;int n,f,...
阅读全文
摘要:思路:eng。。。按照题意搜就好了 (一定要注意题面的n#include using namespace std;int n,m,k;double ans=0x3fffffff,area;double dfs(double x,double y,int remain){ ...
阅读全文
摘要:思路: 贪心?就算是吧 先把所有的开始时间排个序 如果当前的能匹配上已有的牛栏,就找开始时间最早的那个。 否则新加一个牛栏 整个过程用priority_queue实现就OK了。。//By SiriusRen#include #include #include using names...
阅读全文
摘要:思路:二分答案经典题吧。。。。注意边界就OK了//By SiriusRen#include #include using namespace std;int n,m,a[100050],ans;bool check(int x){ int jy=0,temp=0; fo...
阅读全文
摘要:按照题意模拟就好……//By SiriusRen#include #include using namespace std;int n,s,tot;char a[21][21];int main(){ scanf("%d%d",&n,&s); for(int i=1;i...
阅读全文
摘要:思路: next_permutation()加个递推组合数随便搞搞就A了…//By SiriusRen#include #include using namespace std;int n,C[11][11],sum,f[11];int main(){ scanf("%d%d...
阅读全文
摘要:题意: 求sigma phi(n) 思路: 线性递推欧拉函数 (维护前缀和)//By SiriusRen#include using namespace std;#define maxn 1000005#define int long longint n,p[maxn+100],s...
阅读全文
摘要:题意: 给你一个矩阵 ,你能往各个方向走(不走出去就行),每次只能上下左右走一格,问路径上的点权最大值和最小值的差最小是多少。 思路: 首先 二分最后的答案, 暴力枚举当前的区间是啥。 DFS 就OK 了 (我的代码可能有点儿小问题…… 枚举的时候没有判左上角的点) (但是A...
阅读全文
摘要:题目:http://poj.org/problem?id=4007思路: (lyd学长的思路) IDA*算法,首先迭代加深限制搜索深度。 可以发现如果当前矩阵中除了左上角的连通块之外,共有M种颜色,那么还需要的步数不小于M。如果当前搜索深度+估价函数的值>深度限制,可以剪枝。 如果...
阅读全文
摘要:剪枝: 1.从后向前枚举 2.迭代加深 然后就0msAC了//By SiriusRen#include using namespace std;int n,T,s[105];bool dfs(int t){ if(s[t]==n)return 1; if(t>=T)re...
阅读全文
摘要:思路: 1. 这 题 不卡常过不去啊…… (先加一个random_shuffle) 首先 我们可以折半 搜这一半可以到达的重量 sort一遍然后搜另一半 对于路程中每一个解 我们可以二分前一半中加这个解最接近w的值,更新ans剪枝: 对于第一次搜索 显然的剪枝:和不能大...
阅读全文
摘要:70分做法: 先预处理出所有点的最近和次近(O(n^2)一遍就OK) 然后暴力求出每个解(O(nm))//By SiriusRen#include #include #include #define inf 0x3fffffffusing namespace std;int n,x...
阅读全文
摘要:Orz双向搜索的cy大神我用的是hash 也蛮快的//By SiriusRen#include #include using namespace std;#define mod 1000007struct node{char a[4][4],cnt;}a,b;char xx[]={...
阅读全文
摘要:思路: 反向建边 看能到哪儿再正向搞 我傻乎乎地最后竟然用了Dijkstra 普通BFS就可以//By SiriusRen#include #include #include #include using namespace std;#define N 250000struc...
阅读全文
摘要:70分的普通Hash。。。。。。#include #include #include using namespace std;#define int long long#define mod 100000007char jy[66666];int n,m,a[666],s[6666...
阅读全文
摘要:思路: 1.暴力出奇迹 n=1000 n^3矩阵乘法竟然能卡过。。。(Tips:不要乱写读入优化,这玩意儿加了超时,不加AC……)2. 注意题目中的“最多只能有一个地方不一样,,” 我就想到了 能不能用一行的和来优化一下。。一次算一行 我们可以手动模拟一下。。 发现了一个规律...
阅读全文
摘要:思路: Tarjan if(dfn[x]#include #include #define N 1005using namespace std;int xx,yy,first[N],next[N*N*2],v[N*N*2],tot,cnt,T,S,sub[N],f,c...
阅读全文

浙公网安备 33010602011771号