上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 30 下一页
摘要: 随机化算法+贪心!将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; ... 阅读全文
posted @ 2013-08-03 15:18 _随心所欲_ 阅读(283) 评论(0) 推荐(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;... 阅读全文
posted @ 2013-08-03 14:29 _随心所欲_ 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 思路:要求最短时间从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 阅读全文
posted @ 2013-08-03 12:21 _随心所欲_ 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 思路:三分法求解凸函数的极值,三分法介绍在这: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 阅读全文
posted @ 2013-08-03 09:38 _随心所欲_ 阅读(518) 评论(1) 推荐(0) 编辑
摘要: 0/1分数规划问题,用二分解决!!代码如下:#include#include#include#include#include#include#define pi acos(-1.0)using namespace std;double a[1001],b[1001],an[1001];int main(){ int i,j,k,n; double l,r,sum,mid; while(cin>>n>>k){ if(n==0&&k==0) break; for(i=0;i>a[i]; for(i=0;i>b[i]; l=0... 阅读全文
posted @ 2013-08-02 22:14 _随心所欲_ 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 这题主要是推导数学公式!!!将概率问题转化为圆心所在的面积!代码如下:#include#include#include#include#include#include#define pi acos(-1.0)using namespace std;int main(){ int i=0,k; double a1,a2,a3,a4,sum,r,m,n,t,c; cin>>k; while(k--){ cin>>m>>n>>t>>c; r=c/2.0; sum=m*n*t*t; a2=c*((t-c)*n+c)*(m-... 阅读全文
posted @ 2013-08-02 21:32 _随心所欲_ 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 概率DP,递推式:dp[i][j]=sigma(dp[i-1][j]*p[j][k]*dp[i-1][k])再就是判断j和k是否相邻:if(((k>>(i-1))^1)==(j>>(i-1)))代码如下:#include#include#include#include#include#includeusing namespace std;double dp[129][129],p[129][129];int main(){ int i,j,k,ans,n; while(cin>>n){ if(n==-1) break; for(i=0;i>p[i][j 阅读全文
posted @ 2013-08-02 20:08 _随心所欲_ 阅读(196) 评论(1) 推荐(0) 编辑
摘要: 这个题有很多解法,不过还是觉得高斯消元比较好……以前用其他方法做的:#include#includeusing namespace std;int press[6][8];int puzzle[6][8];int main(){ int i,n; cin>>n; for(i=1;i>puzzle[j][k]; for(j=1;j1) { press[1][k+1]++; k++; press[1][k-1]=0; } ... 阅读全文
posted @ 2013-08-02 19:03 _随心所欲_ 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 看题就知道要使用高斯消元求解!代码如下:#include#include#include#include#includeusing namespace std;int an[70][71],p,ans[70];char str[71];int pows(int a,int b){ int ans=1; while(b){ if(b&1) ans=(ans*a)%p; b>>=1; a=(a*a)%p; } return ans%p;}int gcd(int a,int b){ if(aan[row][i]) row=j; ... 阅读全文
posted @ 2013-08-02 16:50 _随心所欲_ 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 由于数据量不大,所以这题有很多解法。我用的是高斯消元化为逆矩阵解决的……代码如下:#include#includeusing namespace std;int an[9][10]={{1,1,0,1,0,0,0,0,0,0},{1,1,1,0,1,0,0,0,0,0},{0,1,1,0,0,1,0,0,0,0},{1,0,0,1,1,0,1,0,0,0},{1,0,1,0,1,0,1,0,1,0},{0,0,1,0,1,1,0,0,1,0},{0,0,0,1,0,0,1,1,0,0},{0,0,0,0,1,0,1,1,1,0},{0,0,0,0,0,1,0,1,1,0}},ans[9];in 阅读全文
posted @ 2013-08-02 15:15 _随心所欲_ 阅读(299) 评论(0) 推荐(0) 编辑
上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 30 下一页