nyoj 71 独木舟上的旅行

来源:互联网 发布:统计学网络课程 编辑:程序博客网 时间:2024/04/26 07:09

http://acm.nyist.net/JudgeOnline/problem.php?pid=71

1)法一

分析:该算法是先将载重排序,然后从较重的货物开始,从0寻找符合条件的货物,直到i>=j

 #include<iostream>#include<cstdio>#include <algorithm>using namespace std;int main(){int i,j,n,w,t,T,count;int b[305];scanf("%d",&T);while(T--){scanf("%d%d",&w,&n);for(i=0;i<n;i++)scanf("%d",&b[i]);sort(b,b+n);count=0;for(i=n-1,j=0;i>=j;i--){t=w-b[i];if(b[j]<=t&&i>=j){t-=b[j];j++;}count++;}printf("%d\n",count);}return 0;}        

2)法二

分析:为什么这个反而比较麻烦呢,因为没有看到只有两个人,其实是想实现不限人数的说

#include<iostream>#include<cstdio>#include<cstring>#include <algorithm>using namespace std;int main(){int i,n,w,t,flag,T,num,count;int b[305],a[305];scanf("%d",&T);while(T--){memset(a,0,sizeof(a));scanf("%d%d",&w,&n);for(i=0;i<n;i++){scanf("%d",&num);b[i]=num;a[num]++;}sort(b,b+n);count=0;for(i=n-1;i>=0;i--){if(!a[b[i]]) continue;a[b[i]]--;t=w-b[i];flag=0;while(t&&!flag){if(a[t]){a[t]--;flag=1;}elset--;}count++;}printf("%d\n",count);}return 0;}

PS:不限人数的

t=t1=w-b[i];while(t){if(a[t]){a[t]--;t=t1-t;t1=t;}elset--;}count++;