摘要: 题意大概是给你一幅柱状图,寻找里面最大的长方形的面积。一类很典型的动态规划问题,我之前一直不会。QAQl[i] r[i]分别表示以i这个柱子为长方形的高,两边最多能够延伸到的位置。如果l[i]的左边那一个的高度大于等于当前的高度,那么就可以延伸下去,一直更新到不能延伸下去为止。即 while(h[l[i]-1]>=h[i]) l[i]=l[l[i]-1];右边以同样的方式处理即可。这个模型可以变换成很多情况,需要好好理解#include #include using namespace std;const int maxn = 100001;int height[maxn],left_b 阅读全文
posted @ 2014-03-17 22:58 acm_roll 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 最大子矩阵和问题=。=最朴素的方式是枚举矩阵左上角的点和右下角的点,然后计算和,复杂度是n^4这里可以利用动态规划来进行优化枚举子矩阵的起始行i和终止行j,然后将其求和使其转化为一维的数组,然后利用动态规划在O(n)的复杂度内求出最大和即可。复杂度是n^3对于n#include #include #include using namespace std;const int maxn = 105;const int INF = INT_MAX / 2;int sum[maxn][maxn],v[maxn][maxn],t[maxn];int maxsum(int *f,int n) { i... 阅读全文
posted @ 2014-03-17 22:48 acm_roll 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 题意大概是,2,3,5,7的和他们的整数倍数的数都称为Humble Number,将所有的Humble Number从小到大排列,现在输入N(N #include #include #include using namespace std;typedef long long LL;#define min_t(a,b) (((a)<(b))?(a):(b))LL min(LL a,LL b,LL c,LL d) { return min_t(min_t(a,b),min_t(c,d));} LL dp[6000];void init() { int l1 = 1,l2 = 1,l3 ... 阅读全文
posted @ 2014-03-17 22:35 acm_roll 阅读(145) 评论(0) 推荐(0) 编辑
摘要: Problem DescriptionGardon和小希玩了一个游戏,Gardon随便想了一个数A(首位不能为0),把它去掉一个数字以后得到另外一个数B,他把A和B的和N告诉了小希,让小希猜想他原来想的数字。不过为了公平起见,如果小希回答的数虽然不是A,但同样能达到那个条件(去掉其中的一个数字得到B,A和B之和是N),一样算小希胜利。而且小希如果能答出多个符合条件的数字,就可以得到额外的糖果。 所以现在小希希望你编写一个程序,来帮助她找到尽可能多的解。 例如,Gardon想的是A=31,B=3 告诉小希N=34, 小希除了回答31以外还可以回答27(27+7=34)所以小希可以因此... 阅读全文
posted @ 2014-03-17 22:21 acm_roll 阅读(224) 评论(0) 推荐(0) 编辑
摘要: Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同类。 第二种说法是"2 X Y",表示X吃Y。 此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。 1) 当前的话与前面的某些真的话冲突,就是假话; 2) 阅读全文
posted @ 2014-03-17 22:14 acm_roll 阅读(240) 评论(4) 推荐(0) 编辑