C++靜態計劃之背包成績處理辦法。本站提示廣大學習愛好者:(C++靜態計劃之背包成績處理辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C++靜態計劃之背包成績處理辦法正文
本文實例講述了C++靜態計劃之背包成績處理辦法。分享給年夜家供年夜家參考。詳細剖析以下:
成績描寫:
背包的最年夜容量為W,有N件物品,每件物品分量為w,價值為p,如何選擇物品能使得背包裡的物品價值最年夜?
輸出:
10 3 (W,N)
4 5 (w,p)
6 7 (w,p)
8 9 (w,p)
完成代碼:
#include <stdio.h> #define THING 20 #define WEIGHT 100 int arr[THING][WEIGHT]; /* 背包涵量為weight,順次測驗考試1 - thing 物品時的最年夜價值 */ int price[100]; /* 物品價錢表 */ int weight[100]; /* 物品分量表 */ int main() { int i,j; int max_weight,max_thing; /* 初始化 */ for(i = 0 ; i < THING ; ++i) { for(j = 0 ; j < WEIGHT ; ++j) arr[i][j] = 0; } /* 讀入數據 */ scanf("%d%d",&max_weight,&max_thing); for(i = 1 ; i <= max_thing ; ++i) { scanf("%d%d",&weight[i],&price[i]); } /* 盤算 */ for(i = 1 ; i <= max_thing ; ++i) { for(j = 1 ; j <= max_weight ; ++j) { if(j >= weight[i]) /* 假如以後物品的容量小於背包涵量 (以後物品能放出來) */ { /* 假如以後物品的價值 + 背包殘剩空間能放出來的物品價值 (之間盤算過的最好計劃) */ /* 年夜於上一次選擇的價值,則放入以後物品 */ if(price[i] + arr[i - 1][j - weight[i]] > arr[i - 1][j]) arr[i][j] = price[i] + arr[i - 1][j - weight[i]]; else /* 不然持續沿用前次的選擇 */ arr[i][j] = arr[i - 1][j]; } else /* 以後物品放不出來,持續沿用前次的選擇 */ arr[i][j] = arr[i - 1][j]; } } /* 輸入最優解 */ printf("max weight : %d\n",arr[max_thing][max_weight]); /* 輸入一切子解 arr[][] */ for(i = 0 ; i <= max_thing ; ++i) { for(j = 0 ; j <= max_weight ; ++j) printf("%3d",arr[i][j]); printf("\n"); } return 0; }
願望本文所述對年夜家的C++法式設計有所贊助。