poj 2291/3637 水题排序

来源:互联网 发布:知乎精华化妆品 编辑:程序博客网 时间:2024/04/28 08:23

poj 2291题意:给你几根绳子,每根最大承重能力都不同,从中选出几根,问最大承重力量是多少?称重是选出绳子的最小值*根数(比如有1,10,15承重的3跟绳子,如果用一根的话,选15的,能承重15,用2根的话,用10和15的,能承重10*2=20,3根的话显然只能是1*3=3了,承重最大的当然是20。

poj3637题意:一堆物品的价格给出,已知一次买≥3个东西,最便宜的免费。问怎么买这些东西花钱最少。

2291代码:

#include <cstdio>#include <algorithm>#include <cstdlib>using namespace std;#define clr(s,t) memset(s,t,sizeof(s));#define N 1005int T,n;int s[N];int main(){    scanf("%d",&T);    while(T--){        int i,j;        int res = 0;        scanf("%d",&n);        for(i = 0;i<n;i++)            scanf("%d",&s[i]);        sort(s,s+n);        for(i = 0;i<n;i++)            res = max(res,s[i]*(n-i));        printf("%d\n",res);    }    return 0;}

3637代码:

#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>using namespace std;#define clr(s,t) memset(s,t,sizeof(s))#define N 20005int T,n,s[N];int main(){    scanf("%d",&T);    while(T--){        int i,res = 0;;        scanf("%d",&n);        for(i = 0;i<n;i++)            scanf("%d",&s[i]);        sort(s, s+n);        for(i = n-3;i>=0;i-=3)            res += s[i];        printf("%d\n",res);    }    return 0;}


0 0
原创粉丝点击