摘要:
#include#include#includeusing namespace std;char ss[33];int b[1002][1002],qian[1002],hou[1002];int main(){ int i,j,n,m,t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(b,0,sizeof(b)); for(i=1;i=2&&b[i][qian[j]-1]>=b[i][j]) qian[j]=qian[q... 阅读全文
摘要:
hdu 1506 Largest Rectangle in a Histogramhttp://acm.hdu.edu.cn/showproblem.php?pid=1506【题意】:给出一排建筑物的高度 其宽度均为1 求他们中最大的矩形面积 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define INF 10000000 7 using namespace std; 8 9 __int64 a[1000002],qian[1000002],hou[1000002],i,j,n,m,k;10 11 12 i... 阅读全文
摘要:
维护一个滑动窗口中的最小值 其右边界增大时 相当于王其中增加元素 左边界增大时 相当于删除元素 窗口整体向右滑动若窗口中的元素为 2 1因为窗口整体是向右滑动的 所以2永远不会成为最小值。 将这些元素看成一个队列 因此,每次加入一个元素时都应该从队头删除 他前面的比它大的元素 使整个序列成为递增序列 如 本来队列里是 2 4 6 8 10 加入了 7后要删除 8 10 使此时队列成为 2 4 6 7的递增序列然后还要从队尾删除不在窗口范围内的元素 。由于 每个元素最多被删除一次 所以总的时间复杂度是 O(n)poj 2823 Sliding Windowhttp://poj.org/pro.. 阅读全文
摘要:
大白: p70 放置街灯 一开始看大白上的思路硬是 没看懂 后来看代码时有几个疑点 再结合 前面的分析 豁然开朗了 beautiful mind 实在是太聪明了!!(鸡冻中。。。。)这里的一个技巧是 要是有两个 要优化的量 v1和v2 要求先满足v1最小 v1相同的情况下v2最小 则可以吧而这... 阅读全文
摘要:
http://poj.org/problem?id=2955【题意】 给出一串括号的字符串最长100, (), [], (()), ()[], ()[()] 是合法的 想这种(, ], )(, ([)], ([(] 是不合法的 求出最长的 合法的 子序列【思路】 d[i][j] 从i到j 的最长的 if (d[i][i+k]#include#include#define INF 100000000using namespace std;int d[102][102];char s[102];int ok(int x,int y){ if(s[x]==']'&&s 阅读全文
摘要:
hdu 1599 find the mincost routehttp://acm.hdu.edu.cn/showproblem.php?pid=1599【题意】:在一个无向图中找一个 至少有三个不同点的环 而且花费最少**********************************************************之前学floyd的时候并没有很认真的去理解那个代码这次写的时候 随手就写出了for(i=1;id[i][u]+d[u][j]) d[i][j]>d[i][u]+d[u][j];这样的代码 但是后来仔细想想 这样子不行要求i到j的最短路的时候 先赋初值... 阅读全文
摘要:
https://vijos.org/p/1057【题意】在一个 n*m 的土地中 中有瑕疵的为0 完好的为1 其中最大的正方形无瑕疵土地 输出其边长。【思路】d[i][j]为 以点 i j 为左上角的正方形最大的边长 显然要是a[i][j]=0 则d[i][j]=0 要是a[i][j]=1 则d[i][j]=min(d[i+1][j],d[i+1][j+1],d[i][j+1])+1 ( 画一下图就知道了 )【注意】for(j=m;j>=1;j--) for(i=n;i>=1;i--) 这样才能保证在算d[i][j]时已经算出 d[i+1][j],d[i+1][... 阅读全文
摘要:
题意:sqybi现在有m块大洋,r的人品。请i号MM吃饭要花rmb[i]块大洋.要耗费rp[i]的人品,time[i]的时间 求他泡到最多的MM花费的最少时间是多少【思路】 扩展的01背包了。。 再多加一维 和一个记录时间的数组就可以了d[j][k]:将前i个mm中 用j块大洋 k单位人品 最多可以泡到几个 d[j][k]=max(d[j-rmb[i]][k-rp[i]]+1)ac 代码#include#include //using namespace std;int d[102][102],r[102],rmb[102],rp[102],time[102],cost[102]... 阅读全文
摘要:
http://www.rqnoj.cn/problem/302题意:给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。要求将此字母串分成k份(1#include#includeusing namespace std;char ss[1002],s[10][202],sum[1002][1002],opt[1002][1002];int main(){ int i,j,n,m,t,k,q; while(~scanf("%d%d",&n,&t)) { getchar(); for(i... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=3829hdu 3829 Cat VS Dog题意:动物园有n只狗 m只猫,p个小朋友。规定一个小朋友喜欢猫就讨厌狗,喜欢狗就讨厌猫,要是他喜欢还留在动物园 不喜欢的搬出动物园 他就会很开心 求最多会有多少小朋友开心【思路】:两个小朋友间 要是他喜欢的你不喜欢 或你喜欢的他不喜欢 说明你俩矛盾就在你们两个这之间连一条边 求出整个图的最大独立集 也就是说这集合里的点两两之间没有矛盾的 可以一个一个被满足。 #include #include #include#includeusing namespace std. 阅读全文