| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2727 人关注过本帖
标题:求解三元一次不定方程
只看楼主 加入收藏
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
结帖率:50%
收藏
 问题点数:0 回复次数:14 
求解三元一次不定方程
http://acm.tju.edu.cn/toj/showp2869.html
求三元一次不定方程 ax+by-cz=n
的一组正整数解,Special Judge,给出任意一组解都可以。
搜索更多相关主题的帖子: 三元 方程 求解 
2007-07-28 22:34
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 
ax+by-cz=n

女侠,约吗?
2007-07-28 22:39
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
收藏
得分:0 
回复:(leeco)求解三元一次不定方程
Hi leeco:

You may consider the extended-Euclid algorithm for gcd. The algorithm finds x and y such that

a*x + b*y = gcd(a, b).

You can apply an extra step to make a>=0 and b<=0.

My soln based on the algorithm is accpted.

Good luck!


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-07-29 05:19
medicihophy
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2007-7-28
收藏
得分:0 
呵呵,不知道PSO可以不啊?很SB的方法,不过用来作ACM好像不太行,结果不确定嘛!GA也是!

2007-07-29 12:58
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
收藏
得分:0 
回复:(medicihophy)呵呵,不知道PSO可以不啊?很SB...

wrong post.

[此贴子已经被作者于2007-7-29 13:25:58编辑过]


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-07-29 13:20
medicihophy
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2007-7-28
收藏
得分:0 

#include "stdio.h"
#include "math.h"
#include "time.h"
#include "stdlib.h"

const int iAgentDim=3;
const int iRangL=1;
const int iRangR=10000;
const int a=5;
const int b=6;
const int c=7;
const int n=3000;

const int iPSONum=20;

int iStep=1000;
double w=0.9;
const double delta1=1;
const double delta2=1;

#define rnd(low,upper) ((rand()/(double)RAND_MAX)*((upper)-(low))+(low))
#define rdint(i) (rand()%(int)(i))
#define rndint(a,b) (rdint((int)(b)-(int)(a)+1)+(int)(a))
int gbest[iAgentDim];

class Agent
{
public:
int dpos[iAgentDim];
int dpbest[iAgentDim];
int dv[iAgentDim];
int m_dFitness;
int m_dBestfitness;


Agent()
{
srand((unsigned)(time(NULL)+rand()));
int i=0;
for(i=0;i<iAgentDim;i++)
{
dpos[i]=rndint(iRangL,iRangR);
dv[i]=dpbest[i]=dpos[i];
}
}

void UpdateFitness()
{

m_dFitness=abs(a*dpos[0]+b*dpos[1]-c*dpos[2]-n);
if(m_dFitness<m_dBestfitness)
{
m_dBestfitness=m_dFitness;
int i=0;
for(;i<iAgentDim;i++)
{
dpbest[i]=dpos[i];
}
}
}

void UpdatePos()
{
int i=0;
for(;i<iAgentDim;i++)
{
dv[i]=(int)(w*dv[i]+delta1*rnd(0,1)*(dpbest[i]-dpos[i])+delta2*rnd(0,1)*(gbest[i]-dpos[i]));
dpos[i]+=dv[i];
}

}
};

class PSO
{
private:
Agent agents[iPSONum];
int m_dBestFitness;
int m_iTempPos;
public:
void Init();
void Search();
int GetBestFitness(){return m_dBestFitness;}

};
void PSO::Search()
{
int k=0;
while(k<iStep)
{
m_iTempPos=9999;
int i;
for(i=0;i<iPSONum;i++)
{
if(m_dBestFitness>agents[i].m_dBestfitness)
{
m_dBestFitness=agents[i].m_dBestfitness;
m_iTempPos=i;
}
}
if(m_iTempPos!=9999)
{
int j;
for(j=0;j<iAgentDim;j++)
{
gbest[j]=agents[m_iTempPos].dpos[j];
}

}

for(i=0;i<iPSONum;i++)
{
agents[i].UpdatePos();
agents[i].UpdateFitness();
}
k++;
}

}

void PSO::Init()
{
int i=0;
m_dBestFitness=1000;
srand((unsigned)(time(NULL)+rand()));
for(;i<iPSONum;i++)
{
agents[i].m_dBestfitness=1000;
agents[i].UpdateFitness();
}
}

int main()
{
PSO pso;
pso.Init();
pso.Search();
for(int i=0;i<iAgentDim; i++)
{
if(gbest[i]<=0)main();
}
if(pso.GetBestFitness()==0)
{
for(int i=0;i<iAgentDim;i++)printf(" %d ",gbest[i]);
}
return 0;
}
很简单的PSO算法,拿来改了改,你们谁有好的方法也贴出来啊!!!!


2007-07-29 13:20
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
回复:(medicihophy)#include
请按照题目的要求……
2007-07-29 16:16
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
回复:(medicihophy)#include

Input
The input consists of several test cases. Each test case consists of four integers x, y, z, n in a single line. (0 ≤ x, y, z, n ≤ 200)
The input will terminated by the end of file.

Output
For each input test case, if nuanran can get n stones, output a single line with the times of getting x stones, the times of getting y stones and the times of throwing z stones, separated by spaces. Otherwise output -1 in a single line.
Please note your answer must fit into 32 signed bits.

Sample Input
2 4 3 5
2 4 2 5
Sample Output
2 1 1
-1

2007-07-29 16:16
medicihophy
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2007-7-28
收藏
得分:0 
不是搞ACM的,呵呵,也没看那个题目,只是一种想法而已.应该可以改过来吧。
其实谁用这些算法啊,作ACM的.

[此贴子已经被作者于2007-7-29 17:08:03编辑过]


2007-07-29 17:05
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
回复:(medicihophy)不是搞ACM的,呵呵,也没看那个...
我是看不懂你的代码,所以不知道怎么改。
2007-07-29 17:20
快速回复:求解三元一次不定方程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017471 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved