當前位置:編程學習大全網 - 源碼下載 - C語言,算法、動態規劃:有壹個箱子的容量為v(正整數,0<=v<=20000),同時有n個物品(0<n<=30),

C語言,算法、動態規劃:有壹個箱子的容量為v(正整數,0<=v<=20000),同時有n個物品(0<n<=30),

#include<stdio.h>

#define N 30

int xiangzi(int n ,int V ,int a[]) //樓主後面的Vo數組必須放進遞歸函數裏面或定義成全局數組 另外h[n]什麽情況

{

int minv,t,m=V;

if(n==0)

{

if(a[n]<=V) // V是剩余空間。minv是所生最小空間,是待求變量,而不是已知的 ,不能V<minv 這樣用來判斷。

minv=V-a[n];

else

minv=V;

}

else

{

t=xiangzi(n-1,V,a);

if(a[n]<=V) //可能a[n]比V大 如果按樓主的程序沒判斷 那麽此時m必定小於0,最後的minv肯定是會小雨0的。應該先判斷 排除這種情礦。因此前面定義m的時候可以初始化m=V;

m=xiangzi(n-1,V-a[n],a); /*考慮選擇這個物體的情況*/

if(t<m)

minv=t;

else

minv=m;

}

return minv;

}

void main()

{

int V;

int n,i,m,min;

int Vo[N];

printf("箱子的容量V為:");

scanf("%d",&V);

printf("物品的種類數為:");

scanf("%d",&n);

printf("物品的體積分別為:\n");

for(i=0;i<n;i++)

scanf("%d",&Vo[i]); //"%d "改成“%d” d後面的空格去掉。不好意思 我學的c++,c的語法不怎麽東, 只是調試出來了,不知道原因,可能語法問題吧。

min=xiangzi(n-1,V,Vo);

printf("%d\n",min); //另外別忘了輸出

system("pause");

}

就這樣了。。。

  • 上一篇:97cece(探索數字世界的奧秘)
  • 下一篇:電腦裏老彈出四五個網頁什麽”維客貼吧”博客啊什麽的怎麽弄也不行哪位高手幫幫忙啊,(不想用超級兔子)
  • copyright 2024編程學習大全網