摘要:
题解:对于任意一对i、j(ij)使得a[k]j)使得a[k] 2 #include 3 const int N=1001,M=2000001; 4 struct inli{ 5 int next,data; 6 inli(const int a=0,const int b=0): 7 next(a),data(b){} 8 }line[M]; 9 int n,a[N],col[N],son[N],sta1[N],sta2[N],top1,top2,last[N],nl;10 void makeline(){11 for (int i=1;ia[i]){... 阅读全文
摘要:
题解:又是搜索- - 加状态压缩剪枝二进制记下每行 每列 每个九宫格用过的数是谁 枚举的时候可以O(1)判断冲突还有个很重要的剪枝 把可能使用数字最少的格子先搜索代码: 1 #include 2 #include 3 #include 4 using std::sort; 5 const int N=82,n=9,val[10][10]={{0,0,0,0,0,0,0,0,0,0}, 6 {0,6,6,6,6,6,6,6,6,6}, 7 {0,6,... 阅读全文
摘要:
题解:先一遍dfs看是否合法若合法 则从上面任意一点到达下面的点一定是连续的 拓扑求出上面每点到下面的点的区间把所有区间按头排序 贪心解决最少几个区间能覆盖全部区域之代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 const int N=501; 6 struct info{ 7 int x,y; 8 info(const int a=0,const int b=0): 9 x(a),y(b){}10 }map[N][N],qj[N],move[4]={info(1,0),info... 阅读全文
摘要:
题解:做这题的时候为了敢速度- - 直接orz了神小黑的题解其实我还是有想一个拙计的方法的- -dp:f[i][j] 表示到i点使用j个加速器 在i前上车的人的时间和轻松愉悦转移之 - - 但是有很严重的两个问题1.空间复杂度O(nk)爆掉2.时间复杂度O(nk^2)更呵呵- -于是弃疗正解:贪心!time[i]表示到i点的时间last[i]表示从i出发的人的最晚到达的时间sum[i]表示在i或i前下车的人数f[i]表示在i后time[j] 2 const int N=1002; 3 struct info{ 4 int x,y,t; 5 info(const int a=0,... 阅读全文