【困惑】uva301 一直TLE啊怎么破!

论坛 期权论坛 脚本     
匿名技术用户   2020-12-29 11:19   20   0
#include<iostream>
#include<cstring>

using namespace std;

struct Order
{
 int sta,des,num;
};
int capacity,Bstation,norder,Max,stapass[8];
bool vis[23];
Order order[23];

bool isok(int ord)
{
 for (int i=order[ord].sta;i<order[ord].des;i++)
  if (stapass[i]+order[ord].num>capacity)
   return 0;
 return 1;
}
void addpass(int ord)
{
 for (int i=order[ord].sta;i<order[ord].des;i++)
  stapass[i]=stapass[i]+order[ord].num;
}
void deletepass(int ord)
{
 for (int i=order[ord].sta;i<order[ord].des;i++)
  stapass[i]=stapass[i]-order[ord].num;
}
int getmoney(int ord)
{
 return order[ord].num*(order[ord].des-order[ord].sta);
}
void dfs(int earning)
{
 int i;
 if (earning>Max) Max=earning;
 for (i=0;i<norder;i++)
 {
  if (!vis[i]&&isok(i))
  {
   vis[i]=1;
   addpass(i);
   int earn=getmoney(i);
   dfs(earning+earn);
   vis[i]=0;
   deletepass(i);
  }
 }
 
}
int main()
{
 while (cin>>capacity>>Bstation>>norder&&capacity)
 {
  for (int i=0;i<norder;i++)
   cin>>order[i].sta>>order[i].des>>order[i].num;
  Max=0;
  memset(stapass,0,sizeof(stapass));
  memset(vis,0,sizeof(vis));
  dfs(0);
  cout<<Max<<endl;
 }
 return 0;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP