摘要: 随便看到的一个题题目:http://poj.org/problem?id=1674给出 n 个数,问最小的交换次数可以让这 n 个数变成升序排列的这个一开始还以为dp呢,可是想了好长时间也不知道怎么dp,原来是找给的n个数里的环的问题,比如说样例 22 3 5 4 1 这里面有两个环 {2,3,5,1},{4},2应该在的位置是 3,3应该在的位置是 5,5应该在的位置是 1,然后1 就到 2 了,所以就是一个环,然后最小的交换次数就是 n - 环数View Code 1 const int N = 10010; 2 struct node 3 { 4 int x; 5 in... 阅读全文
posted @ 2012-08-20 21:51 AC_Girl 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 先说一下叉积求面积View Code 1 struct node 2 { 3 int x; 4 int y; 5 }point[N]; // 数组保存多边形顶点,但是必须按顺序(逆或顺)保存 6 double area(int n) // n 表示多边形的顶点数 7 { 8 int i; 9 double a = 0;10 for(i = 0; i < n; i++)11 {12 int j = (i + 1) % n; // 保证最后一个和第一个连起来13 a += point[i].x * point[j... 阅读全文
posted @ 2012-08-20 21:43 AC_Girl 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 今天突然看见凸包题,然后翻看自己以前学的时候写的博客,竟然发现那个学习的链接没了,就去看了算法导论,然后对着模板,把这个算法看了一遍,东西还是要多看几遍的,每次看都有不同的感受,总会有那么一次,你会发出一句感慨:呃,原来是这样啊!现在把模板整理一下吧先说一下求解步骤:1.首先在输入的点集中找出一个对照点,放入到 p[0]中,这个对照点就是 在点集的最下,最左的那个点2.对 1 ~ n - 1的点按相对于 对照点的极角从小到大排序,如果极角相同那么就按距离对照点的远近从小到大排序3.把输入的点集的前两个点放入到栈中,然后依次扫描剩余的点,把不是凸包顶点的点从栈中剔除,沿逆时针方向通过凸包时,在每 阅读全文
posted @ 2012-08-20 21:23 AC_Girl 阅读(674) 评论(0) 推荐(0) 编辑
摘要: 两道简单的 dp题目题目:http://poj.org/problem?id=1159给一个字符串添加字符,使字符串变成回文串,很简单的一个dp,不过还是MLE了一次,改成了滚动数组就可以了View Code 1 const int N = 5010; 2 int dp[2][N]; 3 char str[N]; 4 int main() 5 { 6 int i,j,n; 7 //freopen("data.txt","r",stdin); 8 while(scanf("%d",&n) != EOF) 9 {10 getcha 阅读全文
posted @ 2012-08-20 11:08 AC_Girl 阅读(154) 评论(0) 推荐(0) 编辑