1. 程式人生 > >c/c++最少裝箱問題(動態規劃)

c/c++最少裝箱問題(動態規劃)

問題描述:

出口質量不等的鑽石n顆,至少需要多少個箱子?

輸入:

一個整數m:箱子最大承載重量;

一個整數n:鑽石的個數;

第i顆鑽石的質量大小a[i];

輸出:

最少需要多少箱子

舉例:

輸入:

10

5

4 5 7 3 6

輸出:

3

c++程式碼實現(動態規劃求解):

#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
int i,j,k,l,n,m;
int a[1000],b[1000],c[1000];
int G[1000][1000];

void fun(int a[])
{
    int f[1000]={0};
    for(i=1;i<=n;i++) {
		for(j=m;j>=a[i];j--) {
            if (f[j] < f[j - a[i]] + a[i]){
                f[j] = f[j - a[i]] + a[i];
                G[i][j] = 1;
            }
		}
	}
}

void countminbag()
{
    int i = n;
    int j = m;
    while(i)
    {
        if (G[i][j] == 1)
        {
            /*if不滿足,表示第i件物品沒裝入箱子,if條件滿足,表示放入箱子了*/
            //cout<<i<<endl;
            j -= a[i];//此時重量減少
            a[i] = 0;
        }
        i--;
    }
}

int main()
{
    /**輸入引數:
     * @param m 箱子最大承重
     * @param n 鑽石個數
     * @param a[] 每個鑽石的重量
     */
    int cntbag=0,sum=0;
    cout<<"輸入揹包容量"<<endl;
	cin>>m;
	cout<<"輸入鑽石個數"<<endl;
	cin>>n;
    for(i=1;i<=n;i++){
        cin>>a[i];
        sum += a[i];
    }
    while(sum){
        sum = 0;
        fun(a);
        countminbag();
        cntbag++;
        for(i=1;i<=n;i++)
            sum += a[i];
        //cout<<sum<<endl;
    }
    cout<<"最少揹包數:"<<cntbag<<endl;
    return 0;
}

相關推薦

c/c++最少裝箱問題動態規劃

問題描述: 出口質量不等的鑽石n顆,至少需要多少個箱子? 輸入: 一個整數m:箱子最大承載重量; 一個整數n:鑽石的個數; 第i顆鑽石的質量大小a[i]; 輸出: 最少需要多少箱子 舉例: 輸入: 10 5 4 5 7 3 6 輸出: 3 c++

C - A decorative fence POJ - 1037 動態規劃

C - A decorative fence  POJ - 1037  Richard just finished building his new house. Now the only thing the house misses is a cute little w

C++ 求最長遞增子序列動態規劃

i++ 序列 有序 ostream 一個數 ace std for 個數 i 0 1 2 3 4 5 6 7 8 a[i] 1 4 7 2 5 8 3 6 9 lis[i] 1 2 3 2

JAVA程式碼—演算法基礎:最少貨幣換錢問題求解動態規劃

最少貨幣換錢問題求解(動態規劃) 問題:換錢問題 給定一個數組arraydemo,arraydemo中所有的值都為正數且不重複。 每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定一個整數aim代表要找的錢數, 求組成aim的最少貨幣數

計蒜客-刪除最少的元素動態規劃

#include <stdio.h> #include <stdlib.h> int countDeletedElements(int *nums, int length) { //len1和len2分別為從左向右求最長遞減序列長度和從右向左

hud2059龜兔賽跑動態規劃

n+1 動物 include output script text sam 起跑線 other 龜兔賽跑 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T

ship動態規劃

動態規劃 輸出 一個 子序列 升序 端點 如果 2個 長度 (ships.pas/c/cpp) 來源:《奧賽經典》(提高篇)【問題描述】PALMIA國家被一條河流分成南北兩岸, 南北兩岸上各有N個村莊。 北岸的每一個村莊有一個唯一的朋友在南岸,且他們的朋友村莊彼此不同。每一

計蒜客--爬樓梯 動態規劃

tle nbsp vector main long 3.1 false n) 方法 假設你現在正在爬樓梯,樓梯有 nn 級。每次你只能爬 11 級或者 22 級,那麽你有多少種方法爬到樓梯的頂部? 輸入格式 第一行輸入一個整數 n(1\leq n \leq 50)n

【算法學習】雙調歐幾裏得旅行商問題動態規劃(轉)

png .com 16px 我們 pan 子結構 最小 而且 復雜度 雙調歐幾裏得旅行商問題是一個經典動態規劃問題。《算法導論(第二版)》思考題15-1和北京大學OJ2677都出現了這個題目。 旅行商問題描述:平面上n個點,確定一條連接各點的最短閉合旅程。這個解的一般形式

動態規劃4977:怪盜基德的滑翔翼

受傷 問題 while 超級 ret 輸入數據 col std namespace 描述 怪盜基德是一個充滿傳奇色彩的怪盜,專門以珠寶為目標的超級盜竊犯。而他最為突出的地方,就是他每次都能逃脫中村警部的重重圍堵,而這也很大程度上是多虧了他隨身攜帶的便於操作的滑翔翼。 有一天

動態規劃4978:寵物小精靈之收服

能夠 出了 哪些 整數 範圍 -- power 必須 方程 描述 寵物小精靈是一部講述小智和他的搭檔皮卡丘一起冒險的故事。 一天,小智和皮卡丘來到了小精靈狩獵場,裏面有很多珍貴的野生寵物小精靈。小智也想收服其中的一些小精靈。然而,野生的小精靈並不那麽容易被收服。對於每一個野

動態規劃6049:買書

動態 種類 blog namespace iostream sin += out bsp 描述 小明手裏有n元錢全部用來買書,書的價格為10元,20元,50元,100元。 問小明有多少種買書方案?(每種書可購買多本) 輸入 一個整數 n,代表總共錢數。(0 <=

decode-ways動態規劃

mine nta sage 方法 表示 subst nco ssa 嘗試 題目描述   A message containing letters fromA-Zis being encoded to numbers using the following map

Triangle動態規劃

ret from 新的 選擇 位置 ive 一個 top 原理 題目描述 Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent

【WC2001】【cogs358】高性能計算機動態規劃

結束 輸入輸出 計算機 stdout 所有 主存 時間 span 要花 【WC2001】【cogs358】高性能計算機(動態規劃) ##題面 【問題描述】 現在有一項時間緊迫的工程計算任務要交給你——國家高性能並行計算機的主管工程師——來完成。為了盡可能充分發揮並行計算機的

【BZOJ1899】午餐動態規劃

需要 記錄 表示 列隊 其中 truct ble read namespace 【BZOJ1899】午餐(動態規劃) 題面 BZOJ 題解 我太弱了 這種\(dp\)完全做不動。。 首先,感性理解一些 如果所有人都要早點走, 那麽,吃飯時間長的就先吃 吃飯時間短的就晚點吃

【BZOJ2998】Problem A動態規劃

gpo pre com space main ostream 最大 == while 【BZOJ2998】Problem A(動態規劃) 題面 BZOJ 題解 一個人的成績範圍可以確定為一個區間 這樣就變成了 選擇若幹區間,不重合, 每個區間有個權值,求最大權值和 這樣就可

ALGO-3 K好數動態規劃

con 正整數 const 方程 自然 自然數 include 由於 can 問題描述 如果一個自然數N的K進制表示中任意的相鄰的兩位都不是相鄰的數字,那麽我們就說這個數是K好數。求L位K進制數中K好數的數目。例如K = 4,L = 2的時候,所有K好數為11、13、20

ALGO-17 乘積最大動態規劃

最大乘積 插入 ont return 沒有 主持人 temp 國際 規劃 問題描述   今年是國際數學聯盟確定的“2000——世界數學年”,又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的一個好朋友XZ也有

【題解】 bzoj4033: [HAOI2015]樹上染色* 動態規劃

規劃 math online 4.2 pro php 白色 AD truct bzoj4033,懶得復制,戳我戳我 Solution: 定義狀態\(dp[i][j]\)表示\(i\)號節點為根節點的子樹裏面有\(j\)個黑色節點時最大的貢獻值 然後我們要知道的就是子節點到