題目描述:
現有一筆經費可以報銷一定額度的發票。允許報銷的發票型別包括買圖書(a類)、文具(b類)、差旅(c類),要求每張發票的總額不得超過1000元,每張發票上,單項物品的價值不得超過600元。現請你編寫程式,在給出的一堆發票中找出可以報銷的、不超過給定額度的最大報銷額。
輸入:測試輸入包含若干測試用例。每個測試用例的第1行包含兩個正數 q 和 n,其中 q 是給定的報銷額度,n(n<=30)是發票張數。隨後是 n 行輸入,每行的格式為:
m type_1:price_1 type_2:price_2 ... type_m:price_m
其中正整數 m 是這張發票上所開物品的件數,type_i 和 price_i 是第 i 項物品的種類和價值。物品種類用乙個大寫英文本母表示。當n為0時,全部輸入結束,相應的結果不要輸出。
輸出:對每個測試用例輸出1行,即可以報銷的最大數額,精確到小數點後2位。
樣例輸入:
200.00 3
2 a:23.50 b:100.00
1 c:650.00
3 a:59.99 a:120.00 x:10.00
1200.00 2
2 b:600.00 a:400.00
1 c:200.50
1200.50 3
2 b:600.00 a:400.00
1 c:200.50
1 a:100.00
100.00 0
樣例輸出:
123.50
1000.00
1200.50
01揹包問題,而這裡是典型的裝箱問題。
有乙個箱子容量為v(正整數,0≤v≤20000),同時有n個物品(0小於n≤30),每個物品有乙個體積(正整數)。要求從n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。
輸入v,n,在輸入n個物品。
輸出箱子的剩餘空間為最小。
#include #include using namespace std;
int v[31];
bool f[1000000];
int package(int n,int w)
for(int i = w; i >= 1; --i)
return 0;
}int main()
}if(flag && a <= 60000 && b <= 60000 && c <= 60000 && a + b + c <= 100000)
v[cal++] = a + b + c;
}cout.setf(ios::fixed);
cout.precision(2);
cout << package(cal,static_cast(q * 100)) / 100.0 << endl;
}return 0;
}
這裡也貼一段01揹包問題的**:
int package(int n, int w)
return f[w];
}
1025 最大報銷額
1025 最大報銷額.cpp 定義控制台應用程式的入口點。題目1025 最大報銷額 時間限制 1 秒記憶體限制 32 兆特殊判題 否提交 4936解決 1184 題目描述 現有一筆經費可以報銷一定額度的發票。允許報銷的發票型別包括買圖書 a類 文具 b類 差旅 c類 要求每張發票的總額不得超過100...
最大報銷額
本題要看清題目,弄清楚題目的意思,也考了理解題目意思的能力。題目要求是發票要滿足條件才可以報銷,發票上不能含有別類東西,而且每類的 相加不能超過600,所有類相加不能超過一千,所以要用if來判斷發票是否滿足條件用1,0表示。程式的結束也要注意一下。include include include us...
最大報銷額
現有一筆經費可以報銷一定額度的發票。允許報銷的發票型別包括買圖書 a類 文具 b類 差旅 c類 要求每張發票的總額不得超過1000元,每張發票上,單項物品的價值不得超過600元。現請你編寫程式,在給出的一堆發票中找出可以報銷的 不超過給定額度的最大報銷額。input 測試輸入包含若干測試用例。每個測...