1樓:征服歐洲
#include
#include
int c[50][50];
int w[10],v[10];
int x[10];
int n;
void knapsack_dp(int n,int w);
void output_sack(int c[50][50],int k) ;
void knapsack_dp(int n,int w)else
c[i][k]=c[i-1][k];
} }} void output_sack(int c[50][50],int k) }
x[1]=(c[1][k]?1:0);
for(i=1;i<=n;i++)
printf("%4d",x[i]);
} void main()
printf("最優解為:\n");
output_sack(c,m);
system("pause");}
求動態規劃01揹包問題c語言的**,要稍微簡單且無錯的。謝謝 20
2樓:灬絲竹青衣丨丶
我寫個c++的。
#include
#define max 1111
using namespace std;
int f[max],n,m,v,w;
int main(){
cin>>n>>m;//n表示個數,m表示揹包容量for(int i=1;i<=n;++i){cin>>v>>w;//v=價值,w=重量for(int j=m;j>=w;--j)if(f[j]=w;--j)這一句變成for(int j=w;j<=m;++j)就行了。
3樓:曾浩帆
int c[10][100];/*對應每種情況的最大價值*/int knapsack(int m,int n)else c[i][j]=c[i-1][j];
}return c[n][m];
} int main()
return 0;}
4樓:匿名使用者
#include
int c[10][100];/*對應每種情況的最大價值*/int knapsack(int m,int n)else c[i][j]=c[i-1][j];
}return(c[n][m]);
}int main()
5樓:
樓上你那個不是貪婪演算法麼?
c語言,演算法,動態規劃。對於0-1揹包問題,我有個小疑問。
6樓:匿名使用者
dp(i,j)表示前i件物品選擇任意件後放進最大容量為j的揹包的最大價值。
顯然,dp(0,j)=0,dp(i,0)=0。
對於第i件物品,有兩種情況:
一、不放進揹包,則最大價值為前i-1件物品可以放進容量為j的揹包的最大價值,即dp(i,j)=dp(i-1,j)
二、放進揹包,則最大價值為第i件物品價值加上前i-1件物品卡伊放進容量為j-w[i]的揹包的最大價值,即dp(i,j)=v[i]+dp(i-1,j-w[i)
綜合兩種情況 dp(i,j)=max
分別用回溯法和動態規劃求0/1揹包問題(c語言**)
7樓:匿名使用者
#include
#include
#include typedef struct goods
goods;
double maxvalue,totalvalue;//方案最大價值,物品總價值
char *select1; //臨時陣列
void backpack(goods *g, int i, double tw, double tv)//引數為物品i,當前選擇已經達到的重量和tw,本方案可能達到的總價值
}select1[i] = 0; //取消物品i的選擇狀態
if (tv - g->value[i] > maxvalue)//若物品總價值減去物品i的價值還大於maxv方案中已有的價值,說明還可以繼續向方案中新增物品 }}
int main()
if(!(g.weight = (double *)malloc(sizeof(double)*g.num)))//分配記憶體儲存物品的重量
if(!(g.select = (char *)malloc(sizeof(char)*g.num)))//分配記憶體儲存物品的重量
if(!(select1 = (char *)malloc(sizeof(char)*g.num)))//分配記憶體儲存物品的重量
totalvalue=0;
for (i = 0; i < g.num; i++)
printf("\n揹包最大能裝的重量為:%.2f\n\n",g.limitw);
for (i = 0; i < g.num; i++)
printf("第%d號物品重:%.2f,價值:%.2f\n", i + 1, g.weight[i], g.value[i]);
for (i = 0; i < g.num; i++)//初始設各物品都沒加入選擇集
select1[i]=0;
maxvalue=0;//加入方案物品的總價值
backpack(&g,0,0.0,totalvalue); //第0號物品加入方案,總重量為0,所有物品價值為totalvalue
sumweight=0;
printf("\n可將以下物品裝入揹包,使揹包裝的物品價值最大:\n");
for (i = 0; i < g.num; ++i)
if (g.select[i])
printf("\n總重量為: %.2f,總價值為:%.2f\n", sumweight, maxvalue );
// getch();
return 0;}
8樓:匿名使用者
你看你這個問題都沒有人來回答,看來qq的金幣還不值錢呢。、偶告訴你,使用metlab直接由 01 問題 工具包,直接呼叫函式解決
動態規劃解決01揹包問題思路
9樓:
用維陣列存放解每都優沒優結構叫態規劃
答案哪要看題目要求輸哪= =看題目規定揹包空間(消耗)
lz再看看吧根本沒理解01揹包
01揹包問題的回溯法中,剪枝用的上界函式問題
不知道你 看的 01揹包的分支限界法一般有2種剪枝 1 當去了i後體積超過揹包版容量,那麼剪去權該子樹,體積都超了價值再大也沒用。2 當前價值 i子樹中所有物品的價值 記錄的最優值,應該就是你說的把。按單位價值貪心雖然不知道你具體指什麼,我的理解是i的單位價值很低就剪了,這應該是不對的,萬一i後面有...
魔獸世界術士揹包問題,請問魔獸世界揹包的問題
能買的,二十格的霜紋包,你可能看錯了。靈魂包只能裝 最多32塊。前期就用普通包,開荒時,先預備好 時才用靈魂包,因為比普通包大。術士要拉糖拉門拉寶寶,做靈魂石做火炎石,都是要 的,消耗量大,靈魂包裝的多,省事。不過平時就用普通包,用不上那麼多 普通包還能裝別的東東,公升級時,排隨機時,是很缺包的。靈...
揹包女人拉著揹包小人啥成語,乙個揹包女人拉著揹包小人啥成語
相依為命來 拼音 源 xi ng y w i m ng 解釋 bai 互相依靠著過日子。泛du指互zhi相依靠,誰也離不dao開誰。出處 晉 李密 陳情表 臣無祖母,無以至今日 祖母無臣,無以終餘年。母孫二人,更相依為命。舉例造句 死而復生的只有這些雜亂的敗草。永逝不返的卻是我們相依為命的慈母。郭沫...