NYOJ-71 独木舟上的旅行(贪心)

来源:互联网 发布:新东方网络视频哪里买 编辑:程序博客网 时间:2021/04/13 09:27

先从小到大排序,从前往后扫,在第k个时,如果小于w,就找a[k]之后的数与a[k]和最大且小于w的那一个。之后把那个数设为w+1,这样之后再扫到这个数时就可以直接跳过

#include<iostream>#include<algorithm>using namespace std;int main(){int s;int w, n, a[300+1];int count;cin>>s;while(s--){count=0;cin>>w>>n;for(int i = 0; i < n; i++)    cin>>a[i];sort(a, a+n);for(int i = 0; i < n; i++){int max = 0;int flag = 0, id;if(a[i]<=w){for(int j = i+1; j < n; j++){if(a[i]+a[j] <= w && a[i]+a[j] > max){max = a[i]+a[j];flag = 1;id = j;}}if(flag){count++;a[id] = w+1;continue;}count++;} }cout<<count<<endl;}return 0;} 

0 0