public static int greedySelector(int [] s, int [] f, boolean a[])
{//s[]开始时间f[]结束时间
int n=s.length-1;
a[1]=true;
int j=1;
int count=1;
for (int i=2;i<=n;i++)
{if (s[i]>=f[j]) { a[i]=true;j=i;count++;}
else a[i]=false;
}
return count;
}
背包问题
void Knapsack(int n,float M,float v[],float w[],float x[])
{Sort(n,v,w);//以每种物品单位重量的价值Vi/Wi从大到小排序
int i;
for (i=1;i<=n;i++)x[i]=0;
float c=M;
for (i=1;i<=n;i++)
{if (w[i]>c)break;
x[i]=1;
c-=w[i];
}
if (i<=n)x[i]=c/w[i];//允许放入一个物品的一部分
}
最优装载
void Loading(int x[],Type w[], Type c, int n)
{int *t = new int [n+1];//t[i]要存的是w[j]中重量从小到大的数组下标
Sort(w, t, n);//按货箱重量排序
for (int i = 1; i <= n; i++) x[i] = 0;//O(n)
for (int i = 1; i <= n && w[t[i]] <= c; i++)
{x[t[i]] = 1; c -= w[t[i]];}//调整剩余空间
}
单源最短路径Dijiksra
template
void Dijikstra(int n, int v, Type dist[], int prev[], Type **c)
{//c[i][j]表示边(i,j)的权,dist[i]表示当前从源到顶点i的最短特殊路径bool s[maxint];
for(int i= 1;i<=n; i++)
{dist[i]=c[v][i]; s[i]=false;
if(dist[i]==maxint) prev[i]=0;
else prev[i]=v;
}
dist[v]=0 ; s[v]=true;
for(int i=1;i
{int temp = maxint, u = v;
for(int j= 1;j<=n; j++)
if( (!s[j])&&(dist[j]
s[u]= true;
for(int j= 1;j<=n;j++)
if( (!s[j])&&(c[u][j])
{Type newdist = dist[u]+c[u][j];
if(newdist
}
}//ENDFOR
}//END
找零钱问题
#define NUM4
void main()
{int m[NUM]={25,10,5,1};
int n;//假设n=99
cin>>n;
cout<
for(int i=0;i
while(n>=m[i]&&n>0)
{cout<
n-=m[i];
}
}//END
多机调度
#define N 10
#define M 3
void sort(int t[],int n);
int set_work1(int t[],int n);
int max(int t[],int num);
int min(int t[],int m);
int set_work2(int t[],int n);
static int time[N]={2,8,18,32,50,72,98,128,182,200},s[M]={0,0,0};
void main()
{sort(time,N);
if(M>=N)//作业数小于机器数
cout<
else
cout<
}
void sort(int t[],int n)
{for(int k=0;k
{int j=k;
for (int i=k; i
if (t[i]>t[j])j=i;
{int temp=t[j];t[j]=t[k];t[k]=temp;}
}
}
int max(int t[],int num)//max函数求解处理时间总和最长
{int max=t[0];
for(int i=1;i
if(max
return max;
}
int min(int t[],int m)
{int min=0;//min记录目前处理作业时间和最小的机器号
for(int i=1;i
if(s[min]>s[i]) min=i;
return min;
}
int set_work1(int t[],int n)
{ int m=0;
for(int i=0;i
s[m++]+=t[i];
return max(s,N);
}
int set_work2(int t[],int n)
{ for(int i=0;i
s[min(s,M)]+=t[i];
return max(s,M);
}
本文来源:https://www.2haoxitong.net/k/doc/b9ed2c85940590c69ec3d5bbfd0a79563c1ed4a8.html
文档为doc格式