#include <stdio.h> int ju[1000][2]={0}; void line(int n); //같은 무게일 때 가격이 높은 순으로 정렬 int cal(int n, int w); int main(void) { int n, w, i, result; scanf(" %d %d", &n, &w); for(i=0; i<n; i++) scanf(" %d %d", &ju[i][0], &ju[i][1]); line(n); /*for(i=0; i<n; i++) printf("%d %d \n", ju[i][0], ju[i][1]);*/ result=cal(n, w); printf("%d", result); return 0; } void line(int n) { int i, j, max, temp; for(i=0; i<(n-1); i++) { max=i; for(j=i+1; j<n; j++) { if((ju[max][1]/ju[max][0])<(ju[j][1]/ju[j][0])) max=j; else if((ju[max][1]/ju[max][0])==(ju[j][1]/ju[j][0]) && ju[max][0]<ju[j][0]) max=j; } if(max!=i) { temp=ju[i][0]; ju[i][0]=ju[max][0]; ju[max][0]=temp; temp=ju[i][1]; ju[i][1]=ju[max][1]; ju[max][1]=temp; } } } int cal(int n, int w) { int i, sum=0, weight=0, a; for(i=0; i<n; i++) { a=(w-weight)/ju[i][0]; sum+=a*ju[i][1]; weight+=a*ju[i][0]; } return sum; }
2018.03.31 12:20
정올 - 알고리즘 - 배낭채우기1(1077)
조회 수 878 추천 수 0 댓글 0