摘要:
题目中要求只要两个村庄间的距离小于等于30就可以转移。而刚开始我以为这个人最多只能走30,转移的路超过30之后就不能再转移了。刚开始用的BFS,怎么写都超时。后来发现看错题了之后,果断换成了DFS,然后才AC。本来挺简单的一道,浪费了大半天的时间。。不过最后能过掉还是很开心的。。#include <iostream>
#include <cstdio>
#include <stack>
#include <memory.h>
using namespace std; struct Village
{ int x; int y; int monas
阅读全文
摘要:
是一道要记录公共子序列内容的DP。状态转移方程部分:for(int i=1; i<=len1; i++) { for(int j=1; j<=len2; j++) { if(!strcmp(str1[i],str2[j])) { f[i][j]=f[i-1][j-1]+1; } else { f...
阅读全文
摘要:
这题用的是queue,还有用了map实现将不同的人分到若干组。queue里的元素还是queue,这样就能实现插队的功能了,直接在特定的queue后面push即可。这里还用了一个bool型的visit数组,用来记录这一个team中是否有人已经在队列里。如果有,直接在对应的queue后面push一个新member。如果没有,说明这个member是他们team里面第一个来排队的,直接把他push在队尾即可。总之,在排队的不是一个人,而一个team。#include <iostream>
#include<cstdio>
#include <map>
#includ
阅读全文
摘要:
这道题比赛当时没做出来。后来听jingo讲了用二分,试了一下,过了。#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <memory.h>
#define M 1000001
using namespace std;
//对天数n进行二分
int menu[10001][51];
int days,dishes,budget; bool check(int mid
阅读全文
摘要:
用一个结构体保存每一个部件,包括quality,price,name,type.先按quality降序排序,注意排序的时候不要将同类的部件打散,要保证同一类部件连在一起。再用componets数组,记录从i到j是哪一个部件。如componets[i]=0,componets[i+1]=3,则知第0到第2条记录是属于部件i的。然后关于质量进行二分。质量的范围取所有部件的质量最大、最小值。若在所有部件类型中,都能满足大于等于这个质量,并且花费不超过budget的,return true,然后调高mid,再进行判断。最后获得一个尽可能高的最低质量。否则return false。调低mid。总之,还是
阅读全文
摘要:
HOJ 2278主要思路:将IP地址看成4位256进制的数,转化成十进制,一个segment就是一个区间。先将所有的segment按左端点升序排列,如果几个segment有重叠,则将它们合并成一个区间。int dn=0; l=seg[0].start; r=seg[0].end; for(int j=1;j<i;j++) { if(seg[j].start<=r) { r=max(seg[j].end,r); continue; } seg[dn].s...
阅读全文