hdu 1864 最大報銷額

2021-08-27 21:30:17 字數 834 閱讀 9187

題意:給了n張發票,每張發票只報銷a,b,c三類物品,每件物品的報銷額不超過600,每張發票的報銷額不超過1000,在只能報銷q元的條件下,問最多能報銷多少錢,輸出兩位小數。

分析:揹包問題。最大容量就是只能報銷的錢數q,揹包裡每乙個物品佔的體積就是它的**,獲得的價值也是對應的**。但是q是浮點數,不能直接加一枚舉,注意到題目中結果輸出兩位小數,發票的**不超過1000,因此我們把所有的錢乘以100,發票最多30張,總時間複雜度為3e6,不會超時。注意分a,b,c三類情況討論,計算三類物品花的錢是否超過60000,一張發票的錢不超過100000.dp[i][j]表示第i張發票**為j的時候最多獲得的**,dp[i][j] = max(dp[i - 1][j],dp[i - 1][j - v[i]] + v[i])同時不能用二維陣列因為j最多為3e6,i最多為30,陣列太大開不下。因此用一維滾動陣列替換dp[j] = max(dp[j],dp[j - v[i]] + v[i])

**:

#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn = 3e6 + 10;

ll dp[maxn],v[50];

int main()

if(flag)

}// for(int i = 1; i <= cnt; i++)

// cout<= v[i]; j--)

}printf("%.2f\n",(double)dp[maxx] / 100.0);

}return 0;

}

HDU 1864 最大報銷額

這個題是乙個揹包題,要求求出能夠報賬的最大金額 思路 把每張發票的報賬總額算出來,然後跑一次01揹包即可 注意 1 如果發票中含有a b c以外的專案,則不可以報賬 2 發票中可能含有多個a專案,判斷超總額的時候需先累加 3 對小數的處理可以先乘以100 include include includ...

HDU 1864 最大報銷額

最大報銷額 time limit 1000ms memory limit 32768kb 64bit io format i64d i64u submit status description 現有一筆經費可以報銷一定額度的發票。允許報銷的發票型別包括買圖書 a類 文具 b類 差旅 c類 要求每張發...

hdu 1864 最大報銷額

problem description 現有一筆經費可以報銷一定額度的發票。允許報銷的發票型別包括買圖書 a類 文具 b類 差旅 c類 要求每張發票的總額不得超過1000元,每張發票上,單項物品的價值不得超過600元。現請你編寫程式,在給出的一堆發票中找出可以報銷的 不超過給定額度的最大報銷額。in...