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;
}










,背包是下一章的内容,还没看~~,先保存起来,看到背包在来做。