上一页 1 ··· 38 39 40 41 42 43 44 45 46 ··· 61 下一页
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549最大流基础题。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 #define MAXN 22 6 #define inf 1<<28 7 int map[MAXN][MAXN]; 8 int pre[MAXN]; 9 int level[MAXN];10 int gap[MAXN];11 12 int SA 阅读全文
posted @ 2013-05-03 11:38 ihge2k 阅读(456) 评论(0) 推荐(0) 编辑
摘要: 终于决定开始学习网络流了=.=<<图论算法理论、实践与应用>>那本书讲了很多关于求最大流的算法,然后我就只挑了一种传说中神奇的SAP算法学习。首先引入几个新名词:1、距离标号:所谓距离标号,就是某个点到汇点的最少的弧的数量(即边权值为1时某个点到汇点的最短路径长度)。设点i的标号为level[i],那么如果将满足level[i]=level[j]+1的弧(i,j)叫做允许弧,且增广时只走允许弧。2、断层(本算法的Gap优化思想):gap[i]数组表示距离标号为i的点有多少个,如果到某一点没有符合距离标号的允许弧,那么需要修改距离标号来找到增广路;如果重标号使得gap数组 阅读全文
posted @ 2013-05-03 11:05 ihge2k 阅读(3491) 评论(3) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1037理解了牛人的代码才明白的,花了一晚上的功夫,orz....跪dp.思路:dp[len[i][0]表示长度为len的以i开始的前两个下降的序列的个数,dp[len][i][1]表示长度为len的以i开始的前两个上升的序列的个数;则有dp[len][i][0]+=dp[len-1][j][1](j<i);dp[len][i][1]+=dp[len-1][j][0](j>i);预处理之后,把序列求出来就可以了(这是难点);做法:由于不知道开始是上升还是下降,这一开始枚举,确定第1位的数,以及升降情况,然后我们就可以根据 阅读全文
posted @ 2013-05-02 23:20 ihge2k 阅读(1127) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://www.codeforces.com/problemset/problem/4/B思路:一开始我看数据也不大,然后就dfs暴搜了一下,orz.....,TLE,然后看了别人的贪心策略,佩服得五体投地啊!!!可以先把Min,Max求出来,然后从第一个MAX[i]开始减,边界条件为MAX[i]>MIN[i]&&r>sum;View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 i 阅读全文
posted @ 2013-05-02 20:14 ihge2k 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://www.codeforces.com/problemset/problem/3/D思路:贪心+调整,?就改成')',如果加了')'后发现右括号比左括号多,就将花费小的括号变成'(',(采用优先队列,默认排序是从大到小);View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<cstring> 5 using namespace std; 6 typedef long long 阅读全文
posted @ 2013-05-02 18:35 ihge2k 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3979思路:我们可以从2只monster入手,假设a1和a2的总攻击力为v,杀死a1需要时间t1,a1的atk为c1;杀死a2的时间为t2,a2的atk为c2;如果先攻击a1,那么受伤值为t1*v+(v-c1)*t2;如果先攻击a2,那么受伤值为t2*v+(v-c2)*t1;假使t1*v+(v-c1)*t2<t2*v+(v-c2)*t1;即t1*c2<t2*c1;直接根据这个排序即可。View Code 1 #include<iostream> 2 #include<c 阅读全文
posted @ 2013-05-01 11:34 ihge2k 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://www.codeforces.com/problemset/problem/3/B思路:不错的贪心题,我们可以先按体积升序排,体积相同的体积为1的升序排,体积为2的降序排,这样选择的时候就能最优。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<string> 6 using namespace std; 7 #define MAXN 100000+10 8 阅读全文
posted @ 2013-05-01 09:46 ihge2k 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1735思路:贪心,只要开头有两个0,则需要判断其上一行最后有多少个连续的0,按上一行最后处0的数量由大到小排序(特殊处理一下最后一行末尾0就可以了);View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define MAXN 10000+10 7 #define MAXL 阅读全文
posted @ 2013-04-30 22:50 ihge2k 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1572思路:dfs暴搜即可。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 #define MAXN 33 6 #define inf 1<<30 7 int map[MAXN][MAXN]; 8 int n,MIN,k; 9 int num[MAXN];10 bool mark[MAXN];11 12 void 阅读全文
posted @ 2013-04-30 21:58 ihge2k 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1707思路:memset妙用,把当天的上课时间标记为true..然后查询的时候进行遍历就行了。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cstdlib> 6 using namespace std; 7 #define MAXN 222 8 struct Person{ 9 bo 阅读全文
posted @ 2013-04-30 21:18 ihge2k 阅读(204) 评论(0) 推荐(0) 编辑
上一页 1 ··· 38 39 40 41 42 43 44 45 46 ··· 61 下一页