摘要: 题目链接:http://codeforces.com/problemset/problem/334/B 一开始看到题目,有点怯,理解了题目后,其实并不难。这句话是突破口three distinct integer vertical straight lines and three distinct ... 阅读全文
posted @ 2013-07-28 11:29 windysai 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://codeforces.com/contest/334/problem/A题意:有n个人,将1~n袋(第 i 袋共有 i 颗糖果,10)输出即可。可能方法有点笨,希望热心的读者可以提出些更好的方法,让我学习学习。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int maxn = 10000 + 10; 7 8 int main() 9 {10 int i, j, k, l, n, temp[maxn];11 while (scanf("%d", &n) != 阅读全文
posted @ 2013-07-27 22:28 windysai 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://codeforces.com/contest/332/problem/B题意:在一个序列中,在所有长度为k的区间里找出两个不重叠的最大和,输出这两个最大和所对应的开头的位置a和b。 一开始没有想到用dp来做,于是有了以下的错误思路(读者可以忽略):声明一个结构体,包括head(保存起始点)、tail(保存结束点)还有sum(保存长度为k的区间的和)。计算出整个序列所有k个小区间的和sum,按sum从大到小排序(隐含的弊端:排序会导致区间与区间之间起始点和结束点的位置很不确定)由于a、b不能相交,所以当找到没有重叠的部分,就找到当前最优解,但不一定是整个题目的最优解。还要 阅读全文
posted @ 2013-07-27 21:31 windysai 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2136 题意不难理解,就是输入四行字符串(每行字符总数不超过72个),统计26个英文字母的数目,并按柱状图的形式输出。我的思路就是,先用一维数组total[]统计每个英文字母的个数,接着找出最大的频率,保存在max中;紧接着用一个二维数组word[][](这个比较关键)记录每一个字母在0~max中是否存储数据,有的话则置1,没有则为0。(假如:字母'A'的频率是2,max = 10,那么word[0][0] = 0, word[0][1] = 1, word[0][2]= 1, word[0][3] = 0.... 阅读全文
posted @ 2013-07-21 23:30 windysai 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://codeforces.com/problemset/problem/327/A 题意是输入一个只有0和1的序列,要求找出一个合理的区间,在这个区间里面把0变成1,1变成0,使得该区间和该区间外的1的个数达到最大。 一开始的的思路是:找最大的0区间(序列中头尾第一次遇到0所夹的区间),然后在这个区间里暴搜(保证该区间内细分到的小区间都搜索过),统计0的个数(由于0会变成1,1自然会变成0,所以没有必要统计1的个数)。但是问题是这样做的话,该区间1的个数和0的个数的多少是不确定的:00 还是 0 == 1。有很多不确定的因素,因此不能保证所找到的0区间是最优的。正确的做.. 阅读全文
posted @ 2013-07-18 17:23 windysai 阅读(510) 评论(0) 推荐(1) 编辑
摘要: 题目链接:http://codeforces.com/problemset/problem/331/C1 这是第一次参加codeforces比赛(ABBYY Cup 3.0 - Finals (online version))成功AC的题目(n ≤ 106),解题的突破口是:Take the magic number, subtract a digit from it (the digit must occur in the number) and get a new magic number. Repeat this operation until a magic number equal. 阅读全文
posted @ 2013-07-18 16:40 windysai 阅读(735) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087题目本质上要求我们求给定序列的最长的递增序列,由于刚接触DP,所以一开始还把状态方程写错了,还特地看了运筹学和算法导论的动态规划这一部分。以下是错误的解题历程,读者可以忽略这部分“【 】”。【(sum[i]保存的是当前求得的最大和,d[i]保存的是第i个数,sum[i]=max{sum[i-1],sum[i-1]+d[i]}条件是:d[i-1]>d[i])。接着写成:sum[i]=sum[i-1]+d[i](d[i-1]<d[i])(注意:这里的d[i-1]不一定紧挨着d[i]的, 阅读全文
posted @ 2013-05-30 23:04 windysai 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 在没学01背包时做的,很遗憾的是,wa了很多次。 wa代码 1 #include 2 #include 3 using namespace std; 4 5 struct back 6 {... 阅读全文
posted @ 2013-05-21 20:57 windysai 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 经典的DP入门题。最近学起DP,做回这道题目,用的是自顶向上的方法来求解,发现代码很长,不过时间短了,这应该就是传说中的“以空间换时间”的说法吧。个人觉得,这比较符合人的思考模式,不过真的很繁琐,由于不知道最后一行中最大和的具体位置,还要比较找出。 状态转移方程是(设f(i, j)为三角形上从点(i,j)出发向下走的最大和路径, a(i, j)表示原始输入的第 i 行第 j 列的数: f(i, j) = a(i, j) + max{f(i-1, j-1), f(i-1, j)} i != j 阅读全文
posted @ 2013-05-21 20:14 windysai 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4505 思路:开门次数的时间是跟要去的楼层数中总共有多少个不同的数有关; 每下一人的总时间跟乘坐电梯的总人数有关; 最后问题出现了,向上运行或向下运行的时间我是根据:由于电梯最开始在0层,那么第一个人要去的楼层肯定是上去的,所以是 第一个人要去的楼层 × 6,中间那些人,就要判断是向上还是向下才能得出结果,最后一个人去完要去的楼层后,势必要回到0层,所以最后的时间还要加上 最后那个人要去的楼层 × 4。 wa代码 1 #include <iostream> 2 usi 阅读全文
posted @ 2013-05-18 11:22 windysai 阅读(202) 评论(0) 推荐(0) 编辑