大佬们请忽略,本人已经优化好了,就是把判定
if(!can[fir]&&!can[las])
的这一句变成了
if(can [las]) continue;
if(can [fir]) break;
下面是我的AC代码,有不足请大佬们指出
```cpp
#include<iostream>
#include<algorithm>
using namespace std;
bool can[30005];
int w,n,m[30005];
int fir,las,ans=0;
void go()
{
sort(m+1,m+n+1);
for(fir=1;fir<=n;fir++)
for(las=n;las>=1;las--)
{
if(can [las]) continue;
if(can [fir]) break;
if(m[fir]+m[las]<=w)
{
ans++;
can[fir]=1;can[las]=1;
}
}
for(int i=1;i<=n;i++)
if(!can[i])
{
ans++;
can[i]=1;
}
}
int main()
{
cin>>w>>n;
for(int i=1;i<=n;i++)
cin>>m[i];
go();
cout<<ans<<endl;
}
```
by 兮水XiShui丶 @ 2017-10-02 15:27:04