题意:
给你一个n*m的棋盘,问你棋盘上最多放多少个马,使得任意两个马都不会互相攻击。
做法:
对于棋盘,我们会发现,如果我们只把马放在白色的方格内,则任意两个马都不会互相攻击。
这样我们有了第一种放法,全放在白格内或者全放在黑格内。
但是有一些特殊情况。
假如n=min(n,m),m=max(n,m);
如果n=1,那么我们可以在棋盘上全放上棋子。
如果n=2,那么我们可以一次把...
分类:
其他好文 时间:
2014-07-29 13:05:56
阅读次数:
313
题目大意:
在一个序列上每次修改一个值,然后求出它的最大的子序列和。
思路分析:
首先我们不考虑不成环的问题。那就是直接求每个区间的最大值就好了。
但是此处成环,那么看一下下面样例。
5
1 -2 -3 4 5
那么你会发现 max = sum - min
也就是和减去最小区间和也可以得到。
所以我们最后要得到的就是两个东西。注意题目中说的不能全部取得。所以还要判断...
分类:
其他好文 时间:
2014-07-28 16:24:13
阅读次数:
244
开始的时候是暴力dfs+剪枝,怎么也不行。后来参考他人思想:
先求出每个点之间的最短路(这样预处理之后的搜索就可以判重返回了),截肢还是关键:1最优性剪枝(尽量最优:目前的状态+预计还有的最小时间>min就return !),2:可行性截肢:如果当前状态+预计状态已经不可行,return。(注意考虑是 continue,还是 return !).以及放的位置!在出口放的效果一般好一些(不在下...
分类:
其他好文 时间:
2014-07-28 00:24:49
阅读次数:
227
1 // 定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。 2 // 要求函数min、push 以及pop 的时间复杂度都是O(1)。 3 #include 4 #include "../data/own/c2_list.h" 5 using namespace std; 6 .....
分类:
其他好文 时间:
2014-07-27 22:49:49
阅读次数:
246
Dijkstra:裸的算法,O(n^2),使用邻接矩阵:算法思想:定义两个集合,一开始集合1只有一个源点,集合2有剩下的点。STEP1:在集合2中找一个到源点距离最近的顶点k:min{d[k]}STEP2:把顶点k加入集合1中,同时修改集合2中的剩余顶点j的d[j]是否经过k之后变短,若变短则修改d...
分类:
其他好文 时间:
2014-07-27 22:21:39
阅读次数:
440
简单的线段树,多余的就不解释了。 1 #include 2 #include 3 4 using namespace std; 5 #define INF 0xffffff0 6 #define max(a,b) (a>b?a:b) 7 #define min(a,b) (a Tree[root]....
分类:
其他好文 时间:
2014-07-27 21:37:10
阅读次数:
216
<html>
<head>
<scriptsrc="http://code.jquery.com/jquery-1.11.1.min.js"></script>
</head>
<body>
<divid="divckb">
<inputtype="checkbox"name="ckb1"value="1"/>张三
<inputtype="checkbox"name="ckb2"value="2"/>..
分类:
Web程序 时间:
2014-07-27 12:11:16
阅读次数:
285
<html>
<head>
<scriptsrc="http://code.jquery.com/jquery-1.11.1.min.js"></script>
</head>
<body>
<divid="divckb">
<inputtype="checkbox"name="ckb1"value="1"/>张三
<inputtype="checkbox"name="ckb2"value="2"/>..
分类:
Web程序 时间:
2014-07-27 12:11:06
阅读次数:
241
朴素Dijkstra不需要用到堆,每次找最小值都得遍历一遍,时间复杂度较高。
点是从编号0到编号n-1的n个点。
以下是模板:
int Dijkstra(int a,int b) //a是起点,b是终点
{
bool visited[maxn]; // 记录访问点
int pos = a, min, dist[maxn]; // pos是个标记点,标记每次最小边对应的...
分类:
其他好文 时间:
2014-07-27 11:22:42
阅读次数:
196
状态压缩DP
dp[i][j]表示在i状态(用二进制表示城市有没有经过)时最后到达j城市的最小时间
转移方程dp[i][j]=min(dp[i][k]+d[k][j],dp[i][j])
d[k][j]是k城市到j城市的最短距离 要先用flody处理
#include
using namespace std;
int d[20][20],dp[1<<11][20];
int n,m;...
分类:
其他好文 时间:
2014-07-27 11:17:42
阅读次数:
176