裝船問題
Problem Description
王小二畢業後從事船運規劃工作,吉祥號貨輪的最大載重量爲M噸,有10種貨物可以裝船。第i種貨物有wi噸,總價值是pi。王小二的任務是從10種貨物中挑選若干噸上船,在滿足貨物總重量小於等於M的前提下,運走的貨物的價重比最大。
Input
輸入數據的第一行有一個正整數M(0 < M < 10000),表示所有貨物最大載重量。在接下來的10行中,每行有若干個數(中間用空格分開),第i行表示的是第i種貨物的貨物的總價值pi ,總重量wi。(pi是wi的整數倍,0 < pi , wi < 1000)
Output
輸出一個整數,表示可以得到的最大價值。
Sample Input
10010 1020 1030 1040 1050 1060 1070 1080 1090 10100 10
Sample Output
550
Hint
價重比:計算其價值與重量之比
Source
#include<stdio.h> struct { int c,p; } k[10000001],t; int l[10000001]; void qsort(int left,int right); int main() { int n,m; while(~scanf("%d%d",&n,&m)) { int i; for(i=0; i<n; i++) { scanf("%d%d",&k[i].c,&k[i].p); l[i]=k[i].p-k[i].c; } qsort(0,n-1); int sum=0; for(i=0; i<m; i++) { sum+=l[i]; } printf("%d\n",sum); } return 0; } void qsort(int left,int right) { int a=l[left],i=left,j=right; if(left>right)return ; while(i<j) { while(i<j&&l[j]<=a)j--; l[i]=l[j]; while(i<j&&l[i]>=a)i++; l[j]=l[i]; } l[i]=a; qsort(left,i-1); qsort(i+1,right); }