12 2011 档案
摘要:/*多重背包问题。把a[i]排下序,然后把a[i]作为选第i件物品时的背包容量V。最后结果要[0, max(a[i])]遍历一遍,找到最大值。*///My Code:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 40007;const int M = 407;class node {public: int h, c, a; friend bool operator < (c
阅读全文
摘要:又是几天不做题,一个二进制优化的多重背包让我写的狗屁不通,错漏百出!TLE, WA了好几次,都是细节啊。思路,很裸的多重背包。My Code: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace std; 6 7 const int N = 100010; 8 const int M = 1024; 9 10 int f[N];11 int k[M], c[M];12 13 int Max(int x, int y) {14 return x &
阅读全文
摘要:我沙茶了,看了半天没看懂样例!后来问别人才知道。然后卑鄙,下流,无耻的看了别人的思路。无语了。思路:dp[i][j],表示前i件物品挂上以后偏倚量为j时的情况数。总情况数为15*20*25 = 7500。所以dp[i:1~20][j:-7500 ~ 7500],可以用dp[i][j:0~15000];My Code:View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 6 using namespace std;
阅读全文
摘要:题意是夫妻俩洗衣服,只有一个盆。为了防止不同颜色的衣服混色,他俩一个用一个盆同时洗衣服,但只能是相同颜色的衣服。现在知道颜色数M, 衣服数N, 每件衣服的洗完所用的时间和每件衣服的颜色。求最短多长时间把所有的衣服洗完。 思路:把每种颜色的衣服归类,求出第i种颜色衣服所用的总时间sum[i], 以sum[i]/2为背包容量,求出该容量是背包的最大value,sum[i] - f[sum[i]/2]就是洗这种颜色的衣服所用的时间。 ps:wa了两次,不知道为什么,又重新敲了一遍就过了。My Code: 1 #include <iostream> 2 #include <cstdi
阅读全文
摘要:临近期末考试,有的课甚至都没学过呢。我想我应该是acmer里的流氓,据说大部分acmer都是学霸,而我这流氓肯定是个特例。今天上午考四级,给我的唯一印象就是那句常说的话:挂挂更健康。估计这次会挂很惨。虽然cet-4,cet-6这种考试也不尽公平(考试前一个小时哥们给我发短信把作文题目告诉我来,傻叉的我还没看到!!!)但总体上还是能体现大部分人的能力的。不想了,明年继续。 关于acm,这段时间,准确说有一个星期吧。一道题也没刷,是在忙着复习吗?也不尽然!人的惰性是一种很恐怖的东西,它可以让你想尽一切借口的逃避,然后躲在宿舍漫无目的的玩。稍微好点的习惯都被惰性慢慢的侵蚀掉了。就像这次的英语作...
阅读全文
摘要:简单01背包:View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 5 using namespace std; 6 7 const int N = 12888; 8 const int M = 3407; 9 10 int f[N];11 int w[M];12 int v[M];13 14 int main() {15 //freopen("data.in", "r", stdin);16 17 int n, V, i,
阅读全文
摘要:第一眼看上去,很明显的母函数嘛。然后巴拉巴拉代码敲出来,TLE。我晕,再看,数据很大。母函数的三重循环会暴掉的,而且仔细想一下,这题相当于染色问题。用母函数的话有很多重复计算的地方。不许要知道凑成面值m时有多少中凑法,只知道可不可达就可以。 然后看到有人说用《背包九讲》里边提到的单调队列优化的多重背包。然后偶硬生生的啥都没干,用了两天时间看单调队列优化的多重背包。可惜最后结果是没看懂。我觉得原因应该是背包这类dp总的思想理解的不好,以后要好好补补。 今晚实在受不了,论文看不懂,去找强队。强队说单是这题的话不用单调队列优化。加一个数组就可以O(NV)过。思路是加一个数组cnt[], cn...
阅读全文
摘要:这是道好题。至少我错了不下10次。dp的两个重点:转移方程+初始化。偶敢保证,偶的转移方程绝对没问题。可是初始化上wa到shi了。昨天想了整整一晚上,跟经典01背包那么像,加上一个容器就写不出来了。然后问鱼神,鱼神说这题的数据人畜无害,哄小盆友的。我了个去!然后问他思路,说设f[i][j][k],表示前i个中挑j个占容量是k时的最大value,然后就没有然后了。。。 我自己就在那列各种状态,各种推导。思路还是很模糊,后来又好几次问鱼神。甚至有几次让我问的直接不鸟我了。T_T悲摧的人生啊。。。 后来推出: f[i][j][k] = max(f[i-1][j][k], f[i-1][j...
阅读全文
摘要:昨晚做cf刚被虐完,还被虐感冒了。然后今晚又有一个内部测试赛。头疼+困+不想做 = 这次的比赛。最后过了一道题,用很暴力很暴力的方法过的。估计的焘哥出题时加的数据不强。这次被虐是必然的。。。我现在就有一个念头,那就是睡觉。。。。TT贴一下D题的代码吧,偶唯一的一个题。。。。题目描述Tom喜欢幸运数。我们都知道一个正整数是幸运数当且仅当其十进制表示形式只包含数字4和7.例如,数47,744,4是幸运的,而5,17,467不是。 一天Tom邂逅了一棵有n个结点的树。另外,他发现,这棵树的是带权的,也即树的每条边都有一个权值(一个正整数)。只有当一条边的权值是幸运数时我们才说这条边是幸运的。大...
阅读全文
摘要:题意看了老半天,就是说给一个序列[1, n],看是否是(1, 2, 3, ... n),入栈以后出栈时可以得到的序列。My Code:View Code #include <iostream>#include <cstdio>using namespace std;const int N = 100007;int st1[N], st2[N];int main() { //freopen("data.in", "r", stdin); int i, top1, top2, n; while(cin >> n) { fo
阅读全文
摘要:/*额滴神啊。。。调了整整一晚上。简单染色问题,染完色后再扫描一遍,找出最大的连续是白色的序列。开始必须把0, 109 这两个点加上去。就因为这个都快调shi了。。。扫描的时候用一个数组记录染色后区间的颜色。然后找连续颜色是白色的最大区间。数据有点大,用离散化吧。*///My Code:#include <iostream>#include <cstring>#include <cmath>#include <cstdio>#include <map>#include <queue>#include <stack&g
阅读全文
摘要:/*开始没看懂题意。悲剧了一晚上。。。题意是N个人编号,1号最高,N号最矮,从后往前跳。我看成1号最矮,N号最高了。其实可以把输入的数转化一下,让1号最矮,N号最高,这样就好处理了。*///My Code:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 10007;int c[N], n;int lowbit(int i) { return i&(-i);}void add(int i, int val) { while(i
阅读全文