pat 갑 레벨 1070 Mooncake(25점)(욕심)

제목 링크: 전송문
사고방식: 물품은 분할할 수 있기 때문에 매번 단가가 가장 높은 물품을 더하면 된다.
코드:
#include 

using namespace std;

const int maxn =  1005;

struct node {
	double d;
	double p;
	bool operator < (const node b)const {
		return p / d > b.p / b.d;
	}
}a[maxn];

int main() {
	int n , d;
	cin >> n >> d;
	for(int i = 0 ; i < n ; i++) {
		cin >> a[i].d;
	}
	for(int i = 0 ; i < n ; i++) {
		cin >> a[i].p;
	}
	sort(a , a + n);
	double ans = 0;
	for(int i = 0 ; i < n ; i++) {
		if(a[i].d >= d) {
			ans += d * a[i].p / a[i].d;
			break;
		}
		else {
			ans += a[i].p;
			d -= a[i].d;
		}
	}
	printf("%.2f
"
, ans); return 0; }

좋은 웹페이지 즐겨찾기