‘壹’ 算法设计题
(再版)
0-1背包问题
0-1背包问题:给定n种物品和一个背包。项目我的体重是无线网络,它的价格是vi背包容量C.
Q:我应该如何选择装载物品的背包,使得装入背包的总价值呢?
选择项目装入背包的每个项目我只有两种选择,即装入背包或不装入背包。项目i装入背包多次,不仅加载的项目我。
因此,这个问题被称为0-1背包问题。
?0-1解向量(X1,X2,...,XN),西安∈{0,1},1 <= I <= N。
动态编程解决方案:
集0-1背包问题给定的子最优值,M(I,J),M(我,j)是第j背包容量,可选择的项目我,我+1,...,N 0-1背包问题的最优值
无效背包()
INT I,J;
为(i = 0; I <=我+ +)
为(J = 0 J <= JMAX; J + +)
M [] [J] = 0;
(i = 0; <= n; i + + )
为(J = 0; <= JMAX; J + +)
(W [I]> J)
米[I] [J] = M [I-1] [J];
其他
M [] [J] = MAX(M [I-1] [J],M [I-1] [JW [我] + V [I]);
printf的(“%d \ N”,M [N] [C]); BR />
}
回溯解决方案:
无效1背包(I)
{
BR />(>),百视通= CV
其他
{
(CW + W [I] <= C )
{
CW + = W [我];
CV + = V [I];
背包(i +1);
CW-= W [I];
CV-= V [I];
}
a>
背包(+1);
}
}
‘贰’ 算法设计问题(程序)
四次三项式:最高次数为4,有3项
(1)
1种情况,m+1≠0,n-4=0,
此时m≠-1,n=4,有四次三项式
(m+1)x^3 y +5xy-1
2种情况,m+1=0,n-4≠0,n-1=2
此时m=-1,n=3,有四次三项式
x^2 y^2 +5xy-1
(2)
必须m+1=0, n-1=1
此时m=-1,n=2,有三次三项式
3x^2 y +5xy-1
‘叁’ 急急急,正在做作业,算法设计题是要怎样做啊,写个C语言还是只写个中文步骤啊,或者都要啊
算法设计题只需要写出相应的数据结构和用文字描述的步骤。
如果你高兴,把步骤用伪代码描述更好。
对于这类题目,程序是绝对不需要的,千万不要写程序:即费时间,又没人看。
‘肆’ 算法设计题
(转帖)
0-1背包问题
0-1背包问题:给定n种物品和一背包.物品i的重量是wi,其价格是vi,背包的容量为C.
问:应该如何选择装入背包的物品,使得装入背包中的总价值最大?
在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包.不能将物品i装入背包多次,也不能只装入部分的物品i.
因此,该问题称为0-1背包问题.
设n元0-1解向量(x1,x2,...,xn),xi∈{0,1},1<=i<=n.
动态规划解法:
设所给0-1背包问题的子问题的最优值为m(i,j),既m(i,j)是背包容量为j,可选择物品为i,i+1,...,n时0-1背包问题的最优值.
void knapsack()
{
int i,j;
for(i=0;i<=n;i++)
for(j=0;j<=jMax;j++)
m[i][j]=0;
for(i=0;i<=n;i++)
for(j=0;j<=jMax;j++)
if(w[i]>j)
m[i][j]=m[i-1][j];
else
m[i][j]=max(m[i-1][j],m[i-1][j-w[i]]+v[i]);
printf("%d\n",m[n][C]);
}
回溯解法:
void knapsack(int i)
{
if(i>n)bestv=cv;
else
{
if(cw+w[i]<=C)
{
cw+=w[i];
cv+=v[i];
knapsack(i+1);
cw-=w[i];
cv-=v[i];
}
knapsack(i+1);
}
}