hdu 2191
Input输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100),分别表示经费的金额和大米的种类,然后是m行数据,每行包含3个数p,h和c(1<=p<=20,1<=h<=200,1<=c<=20),分别表示每袋的价格、每袋的重量以及对应种类大米的袋数。
Output
对于每组测试数据,请输出能够购买大米的最多重量,你可以假设经费买不光所有的大米,并且经费你可以不用完。每个实例的输出占一行。
Sample Input
1
8 2
2 100 4
4 100 2
Sample Output
400
不知道自己代码为啥不能ac~~~泪崩~~,问啥水题都过不鸟,在网上下载别人的代码,带入多组数据,结果都一样,就是不ac~~~help~~
一下是我的代码
程序代码:
#include <stdio.h> typedef struct bag{ int p; int w; int num; double p_w; }bagclass; #define MAXN 1000 bagclass A[MAXN]; //快排接口 int partition(bagclass A[],int st, int ed){ bag key = A[st]; int j = st; for(int i = st + 1; i <= ed; i++){ if(A[i].p_w <= key.p_w){ j++; bag temp = A[i]; A[i] = A[j]; A[j] = temp; } } bag temp = A[j]; A[j] = A[st]; A[st] = temp; return j; } void quicksort(bag A[],int st, int ed){ if(st < ed){ int mid = partition(A,st,ed); quicksort(A,mid + 1, ed); quicksort(A,st,mid - 1); } } //快排接口 int main(){ int testcase; int n,m; while(scanf("%d",&testcase) != EOF){ for(int i = 0 ; i < testcase ; i++){ scanf("%d%d",&n,&m); for(int j = 0; j < m ;j++){//input scanf("%d%d%d",&A[j].p,&A[j].w,&A[j].num); A[j].p_w = A[j].p * 0.1 / A[j].w; } quicksort(A,0,m - 1); //快排 int sum_v = 0; int sum_w = 0; for(int i = 0; i < m ;i++){ if(sum_v + A[i].p * A[i].num <= n){ sum_w += A[i].num * A[i].w; sum_v += A[i].p * A[i].num; } } printf("%d\n",sum_w); } } return 0; }