贪心算法模型1-部分背包型
与常见用动规做的背包不同的是,部分背包过于简单,因为每个物品的可以拆分。
【解法】
先按物品的价值大小排序,价值大的在前,
选择时按顺序选,包满了停止;取完了就接着取下一件
[并没有题目]
------------------------- Code -------------------------------
#include <iostream>
#include <algorithm>
using namespace std;
struct sth {
int v, c;
bool operator >(const sth b) const {
return c > b.c;
}
};
sth a[1001];
int V, C, n;
int main() {
int sum = 0;
cin >> V >> n;
for(int i=1; i<=n; i++) cin >> a[i].v;
for(int i=1; i<=n; i++) cin >> a[i].c;
sort(a+1, a+n+1, greater<sth>());
for(int i=1; i<=n; i++) {
if(sum + a[i].v < V) {
sum += a[i].v;
C += a[i].c * a[i].v;
} else {
C += a[i].c * (V - sum);
break;
}
}
cout << C << endl;
return 0;
}
-----------------------------
Input:
100 3
50 60 10
1 2 3
Output:
180
----------------------------
#END