本文共 711 字,大约阅读时间需要 2 分钟。
题意:有n个垃圾,每件垃圾都有一个大小 l[i],另有若干个垃圾桶,每个垃圾桶的大小均为 l,求最少需要多少个垃圾桶装满n个垃圾。要求:每个垃圾桶最多只能装2个垃圾,且垃圾大小之和不能超过l。输入时确保 l[i]<=l 。
分析:很明显这是一个乘船问题(终于遇见裸的题了诶),而且还更为简单一些,因为它确保了l[i]<=l。
伪代码如下: 输入n,l 输入a[n]; a[n]从小到大排序; int sum=0,i=0,j=n-1; while(i<=j) //注意,一定要有=号,否则某些情况会疏漏一个数据 { if(a[i]+a[j]<=l){ i++;j- -; sum++; } else{ j- -; sum++; } }输出sum代码如下:
#include#include using namespace std;int a[100005];int main() { int n,l;//while(1){ int i,j,sum=0; scanf("%d%d",&n,&l); for(i=0;i<=n-1;i++) scanf("%d",&a[i]); sort(a,a+n);//printf("\n");// for(i=0;i<=n-1;i++) printf("%d\n",a[i]); i=0;j=n-1; while(i<=j) { if(a[i]+a[j]<=l) { i++;j--; sum++; } else { j--; sum++; } } printf("%d\n",sum);//} return 0;}
转载地址:http://cfdci.baihongyu.com/