摘要:
题目比较难理解。给出铁路的容量和站点数,以及几笔订单,要求算出如何盈利最大。咋一看想贪心,但无法确定是最优解啊。于是用dfs做,就两种状况,选与不选,先开一个每个站点的当前人数数组,假设要选,然后各个站点加上人数判断会不会超人数,不会就进入选择的下一轮dfs,然后把人数减掉,进入不选的dfs。这题据说用数组标记会超时。。。代码:#include const int maxn = 30;
int cap, num, ord, ans;
int cnt[10]; struct Order { int s; int e; int p;
};
Order o[maxn]; bool ju... 阅读全文
摘要:
题目:跟N皇后问题一样,不考虑对角冲突,但考虑墙的存在,只要中间有墙就不会冲突。N皇后一行只能放一个,而这题不行,所以用全图暴力放棋,回溯dfs即可,题目最多就到4*4,范围很小。刚开始考虑放一个棋子后就把其他不能放的地方标记下,然后再暴力,后来发现如果一个点重复标记在去标记时就会把点标成合法的,于是改用放棋子是进行检查,由于数据量小,也不会占用多少时间。之后才想到,在标记时可以用累加的,去标记时再一个一个减下来即可。。。代码:#include const int maxn = 5;
char map[maxn][maxn];
int ans, n; bool isok(int x, i... 阅读全文
摘要:
题目给出离散的点,要求求出一笔把所有点都连上的最短路径。最多才8个点,果断用暴力求。用next_permutation举出全排列,计算出路程,记录最短路径。这题也可以用dfs回溯暴力,但是用最小生成树要小心一点,最小生成树求的是最小连通图,而不是连成一条,不能用Kruscal,Prim算法修改一下也可以使用,改成选点时仅考虑头尾两点即可。代码:#include #include #include #include using namespace std; const int maxn = 10; int p[maxn], rec[maxn], n;
double sum, x[ma... 阅读全文
摘要:
题目给出一系列数字,然后问哪个数字是从小到大排在第几的,重复出现算第一个。数据范围为10000,不大,完全可以暴力,sort不会超时。但是由于以前做比赛时也遇到这种题目,没注意看数据范围,然后暴力被hack了。之后就学会了计数排序了。这题也用计数排序做,挺快的,代码也不长。代码:#include #include const int maxn = 10001; int num[maxn], s[maxn]; int main() { int n, q, tmp, m = 0, cnt = 0; while (scanf("%d%d", &n, &q) &am 阅读全文
摘要:
题目要求写一个直接用比较排序的pascal程序,挺有趣的一题。我看题目数据范围就到8,本来以为贪个小便宜,用switch输出。然后发现比较次数是阶乘级别的,8的阶乘也是挺大的,恐怕会交不上去。于是改用回溯法。其实他比较时就是把后面的数一个一个向前比较,然后插到那位前面,继续回溯。else的处理比较麻烦而已,改了好久终于跟标准答案一样了。缩进没有处理,提交上去就ac了,看来oj没有检查缩进呢,如果有检查就还得处理一下了。代码:(未进行缩进处理)#include const int maxn = 10; int n, arr[maxn]; void insert_sort(int p, in... 阅读全文