01リュックサック問題ダイナミックプランニングc swiftデュアルバージョン
3746 ワード
テーマ:n種類の物品とm重量を入れることができるリュックサックを与えて、物品の重量w、価値はpです.問:どのようにしてリュックサックをm重にして、最も価値のあるものを入れることができますか.
概念:なぜこのようなテーマはダイナミックな計画を使って、貪欲なアルゴリズムを使わないのですか.--個人的には,貪欲なアルゴリズムの各ステップの最適解は,最終的な答えが最適解ではない可能性があることを理解している.--動的計画では、前のステップまたは前のステップが最適解ではない場合に、現在のステップが最適解であることを解くことができます.
//このブロガーはとてもよく書いていて、考えがとてもはっきりしています.http://www.cnblogs.com/xy-kidult/archive/2013/03/25/2970313.html
include
データを入力してくださいリュックサックの総重量を入力して、物品の総数量の10、3を入力して各物品の重量と価値を入力します:3、4 4、5、6 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4 0 0 4 4 5 9 9 9 0 0 4 6 9 11
最適解値11
swuftバージョンはエンターテインメントimport UIKEのみ
個人ブログ:www.liangtongzhuo.com
概念:なぜこのようなテーマはダイナミックな計画を使って、貪欲なアルゴリズムを使わないのですか.--個人的には,貪欲なアルゴリズムの各ステップの最適解は,最終的な答えが最適解ではない可能性があることを理解している.--動的計画では、前のステップまたは前のステップが最適解ではない場合に、現在のステップが最適解であることを解くことができます.
//このブロガーはとてもよく書いていて、考えがとてもはっきりしています.http://www.cnblogs.com/xy-kidult/archive/2013/03/25/2970313.html
include
int c[10][10] = {0};
void knapsack(int m,int n)
{
int i,j,w[10],p[10];
for(i=1;ic[i-1][j]){/// c[i-1][j-w[i]] w[i] c[i-1][j] w[i]
c[i][j] = c[i-1][j-w[i]]+p[i];/// w[i]
}else{/// , w[i] , w[i]
c[i][j] = c[i-1][j];/// w[i],
}
}
}
int main()
{
int m,n;int i,j;
printf(" ,
");
scanf("%d,%d",&m,&n);
printf(" :
");
knapsack(m,n);
printf("
");
for(i=0;i<=n;i++)
for(j=0;j<=m;j++)
{
printf("%d ",c[i][j]);
if(j>m-1)printf("
");
}
printf("
");
}
データを入力してくださいリュックサックの総重量を入力して、物品の総数量の10、3を入力して各物品の重量と価値を入力します:3、4 4、5、6 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4 0 0 4 4 5 9 9 9 0 0 4 6 9 11
最適解値11
swuftバージョンはエンターテインメントimport UIKEのみ
var c = [[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0]]
///
///m ,n
func knap(m:Int,n:Int){
var w = [0,3,4,5,0,0,0,0,0,0,0,0,0]
var p = [0,4,5,6,0,0,0,0,0,0,0,0,0]
for i in 1...n+1 {
for j in 1...m+1{
if j < w[i]{//
c[i][j] = c[i-1][j]
}else if(c[i-1][j-w[i]]+p[i]) > c[i-1][j]{ /// ,
c[i][j] = c[i-1][j-w[i]]+p[i]
}else{///
c[i][j] = c[i-1][j]
}
}
}
}
knap(10, n:3)
個人ブログ:www.liangtongzhuo.com