排序,贪心。
从小到大排个序算一下就可以了。目测无论从哪个时间点开始算罚时,这样的贪心策略都是正确的。
#include<cstdio> #include<cstring> #include<cmath> #include<stack> #include<queue> #include<algorithm> #include<iostream> using namespace std; int n,a[200]; int ans1,ans2; int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n); int now=10; for(int i=1;i<=n;i++) { if(now+a[i]<=720) { now=now+a[i]; ans1++; ans2=ans2+max(0,now-360); } else break; } cout<<ans1<<" "<<ans2<<endl; return 0; }