白书P61 - 点集配对问题】的更多相关文章

白书P61 - 点集配对问题 状压DP #include <iostream> #include <cstdio> #include <cstring> using namespace std; #define INF 0x3f3f3f3f struct Point { double x,y,z; }p[+]; int n; <<)+]; //dp[j]表示j对应状态(0为未配对,1为配对了)的最小距离和 double dist(int i,int j) {…
白书P60 - 硬币问题 完全背包.DP #include <iostream> #include <cstdio> #include <cstring> using namespace std; #define INF 0x3f3f3f3f #define N 1010 int n,s; int w[N]; //w表示n种硬币的面值 int dp1[N]; //dp1[j]表示刚好凑足j的最少硬币数 int dp2[N]; //dp2[j]表示刚好凑足j的最多硬币数…
题目大意:起重机有n节,题目给出要调节的k节,每节调节成x度,求最后底部的起重机的坐标(最顶上的起点为(0,0)). 分析:一开始我看白书,看不懂他那个向量旋转的坐标是怎么来的,翻了很多博客,才发现,是自己数学基础的遗漏(都怪自己高中没好好学T.T),向量旋转涉及到复数的概念和表达. 首先复数表达式z=x+i*y=|z|*(cosx+i*sinx)(i²=-1),假设两个个复数分别为 z1=x1+y1*i=r1*(cos(p1)+i*sin(p1)) z2=x2+y2*i=r2*(cos(p2)…
白书的一道水题.话说好久没认真做难题了.今天出了排名,所有队伍里倒数第一啊! 代码没什么可说的了. #include <algorithm> #include <cstring> #include <ctype.h> #include <cstdlib> #include <cstdio> #include <vector> #include <string> #include <queue> #include…
白书一:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=64609#overview 注意UVA没有PE之类的,如果PE了显示WA. UVA401:Palindromes #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namesp…
白书上的线段树RMQ实现,自己重写了一遍: #include <bits/stdc++.h> using namespace std; const int MAXN=1<<17; int n,dat[MAXN*2-1]; //把所有的值设为MAXN void init(int _n) { n=1; while(n<_n)n*=2; for(int i=0;i<2*n-1;i++) { dat[i]=MAXN; } } //把第k个值(0-index)更新为a void…
给定n个点(n是偶数)使得两个点两两配对,最后总的距离和最小. 用是表示集合,那么dp[s]表示集合s配对后的最小距离和  , 状态转换方程为  表示集合中任意拿两个元素配对,然后转移为更小的两个集合的点集配对.i=min(s)表示i为集合中的第一个元素,因为第一个元素肯定要配对的, 所以找到集合中的第一个元素后,我们枚举要配对的另外一个元素j,j>i && j属于s 我们用二进制表示一个集合,1表示该元素存在,0表示不存在,然后进行状态转移 我们不需要担心一个状态的子状态没有被算出…
具体题解看大白书P316 #include <iostream> #include <algorithm> #include <vector> #include <string.h> #include <stack> #include <cstdio> using namespace std; struct Edge{int u,v;}; +; int pre[maxn],iscut[maxn],bccno[maxn],dfs_clo…
个人感觉有点坑 add用的标记永久化 set用的标记下传 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define lson o<<1,l,m #define rson (o<<1)+1,m+1,r #define ls o<<1 #define rs (o<<1)+1 using namespac…
1.逆元 这里有个注意事项要说,就是当要求 (a-b)%m 的时候要注意不能直接 (a%m-b%m)%m 原因是得出的值有可能是负数,所以 (a%m-b%m+m)%m 才是正确的. //x,y是引用 int exgcd(int a,int b,int &x,int &y){ //d是最后要返回的 int d=a; ){ //递归时,y和x也要换 d=exgcd(b,a%b,y,x); //根据x求y y-=(a/b)*x; }else{ x=;y=; } return d; } //求逆元…