讨论 / 怎么优化才能100?(当前30,超时)
forcer 2015-11-06 06:08:55
点我顶贴 收藏 删除
#include<cmath>

#include<math.h>

#include<ctype.h>

#include<algorithm>

#include<bitset>

#include<cassert>

#include<cctype>

#include<cerrno>

#include<cfloat>

#include<ciso646>

#include<climits>

#include<clocale>

#include<complex>

#include<csetjmp>

#include<csignal>

#include<cstdarg>

#include<cstddef>

#include<cstdio>

#include<cstdlib>

#include<cstring>

#include<ctime>

#include<cwchar>

#include<cwctype>

#include<deque>

#include<exception>

#include<fstream>

#include<functional>

#include<iomanip>

#include<ios>

#include<iosfwd>

#include<iostream>

#include<istream>

#include<iterator>

#include<limits>

#include<list>

#include<locale>

#include<map>

#include<memory>

#include<new>

#include<numeric>

#include<ostream>

#include<queue>

#include<set>

#include<sstream>

#include<stack>

#include<stdexcept>

#include<streambuf>

#include<string>

#include<typeinfo>

#include<utility>

#include<valarray>

#include<vector>

#include<string.h>

#include<stdlib.h>

#include<stdio.h>

typedef long long ll;

using namespace std;

int n,m,h[5],in,best=-1,p[355];

void dfs(int pl,int c1,int c2,int c3,int c4,int pnt)

{

if(pl==n-1)

{

if(pnt>best) best=pnt;

return;

}

if(c1) dfs(pl+1,c1-1,c2,c3,c4,pnt+p[pl+1]);

if(c2) dfs(pl+2,c1,c2-1,c3,c4,pnt+p[pl+2]);

if(c3) dfs(pl+3,c1,c2,c3-1,c4,pnt+p[pl+3]);

if(c4) dfs(pl+4,c1,c2,c3,c4-1,pnt+p[pl+4]);

return;

}

int main()

{

cin>>n>>m;

for(int i=0;i<n;i++) cin>>p[i];

for(int i=0;i<m;i++)

{

cin>>in;

h[in]++;

}

dfs(0,h[1],h[2],h[3],h[4],p[0]); //place, rem cards, points

cout<<best<<endl;

return 0;

}

#1 van de sar@2017-11-12 03:56:21
回复 删除
神经病般的头文件
查看更多回复
提交回复