摘要:
随机化算法+贪心!将3*k排序后分成3分,将第二第三份的和分别加起来,让和与500*k比较,都大于则输出,否则,随机生成2个数,在第二第三份中交换!代码如下:#include#include#include#includeusing namespace std;struct an{ int w,lab;}p[200];bool cmp(const an &a,const an &b){ return a.w>n; for(i=0;i>p[i].w; p[i].lab=i+1; } sort(p,p+3*n,cmp); sa=0;sb=0; ... 阅读全文
摘要:
方法1:暴力法矩阵乘法+优化可以卡时间过的。方法2:随机化随机构造向量x[1..n],则有xAB=xC;这样可以将小运算至O(n^2).代码如下:#include#include#include#includeusing namespace std;int a[501][501],b[501][501],c[501][501],n,x[501];bool cal(){ int i,j,k; long long an[501],an2[501]; long long ans; long long sum=0; for(i=0;i>n; for(i=0;i<n;... 阅读全文
摘要:
思路:要求最短时间从A到D,则走的路线一定是AB上的一段,CD上的一段,AB与CD之间的一段。那么可以先三分得到AB上的一个点,在由这个点三分CD!!代码如下:#include#include#include#include#include#include#include#define ll __int64#define pi acos(-1.0)using namespace std;double P,Q,R,ab,cd;struct point{ double x,y;}an[4],pp,qq;int n;double dis(point &a,point &b){ ret 阅读全文
摘要:
思路:三分法求解凸函数的极值,三分法介绍在这:http://hi.baidu.com/czyuan_acm/item/81b21d1910ea729c99ce33db很容易就可以推出旋转后的坐标:x'=xcos(a)-ysin(a);y'=ycos(a)+xsin(a).cal(a)的意义就是在原来坐标上的点经过a弧度逆旋转后,正方形(边与坐标轴平行)最小边长要多长cal()在旋转的时候符合凸函数,所以三分求最值代码如下:#include#include#include#include#include#include#include#define ll __int64#defi 阅读全文