日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

背包问题I--最大字段和

發布時間:2025/6/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 背包问题I--最大字段和 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


背包問題I
難度級別:B; 運行時間限制:1000ms; 運行空間限制:51200KB; 代碼長度限制:2000000B
試題描述

??? 有一個背包容積為 V?和 n 個物品,并給出每個物品有一個體積。要求從 n 個物品中,任取若干個裝入背包內,使背包的剩余空間為最小。

輸入
第一行兩個正整數?V?和?n,分別表示背包的容積和待裝物品的個數;第二行包括?n?個正整數,表示?n?個物品的體積,兩兩之間有一個空格分隔。
輸出
一個數,表示背包中剩余空間的最小值
輸入示例
24?6
8?3?12?7?9?7
輸出示例
0
其他說明
數據范圍:0<V≤20000,0<n≤30




//============================================================================ // Name : maxsum.cpp // Author : judyge // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================/*** 動態規劃:計算最大子段和* 算法描述:* 數組a 有n個元素, 記 s[i] 為從a【0】到a[i]中,包含a[i]的最大子段和* 則: s[i] 的值為: s[i-1]>0時, s[i-1]+a[i]* 否則 a[i]*/ #include <stdio.h> #include <stdlib.h> #include <iostream> #include<algorithm> using namespace std;static int maxn[100]; //中間最大值保存在數組 static int j=0;int maxSub(int *a, int n,int v) {int i=0, max=0, max_pos = 0;int si_1=0, si = 0;//分別記錄s[i-1], 和 s[i]的值int *p = (int *)malloc(n*sizeof(int)); //p[i] 助于記錄哪些單元被選擇, p[i]=1 表示s[i]計算的結果中中使用了s[i-1]的值if (p==NULL)return -1;max = si_1 = a[0];p[0] = 0;for (i=1; i<n; i++){if (si_1<0){p[i] = 0;si = a[i];} else{p[i] = 1;si = si_1+a[i];}si_1 = si;if (si>max&&si<=v){ //小于等于背包V的保存在數組max = si;max_pos = i;maxn[j++]=max;}}//找到最大子段和的位置for (i=max_pos; i>=0; i--)if (p[i]==0)break;//即i..max_pos為最大子段和的元素printf("%d--%d:%d\n", i, max_pos, max);free(p);p = NULL;return max; }int main() {int n;int v;cin>>v>>n;int a[n];for(int i=0;i<n;i++){cin>>a[i];}maxSub(a,n,v);sort(a,a+j); //排列cout<<a[j]; //輸出最大的 V的剩余最小return 0; }

總結

以上是生活随笔為你收集整理的背包问题I--最大字段和的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。