注意:人数限制是指从站到站的人数,不是站台上的人数
这次0.24,上次写的1.13
#include<stdio.h>
#include<string.h>
int cpct,numsta,numord;
int maxmoney;
int sta[10];
int start[25];
int end[25];
int psg[25];
void dfs(int order, int money)
{
if(money > maxmoney)
{
maxmoney = money;
}
int tempsta[10];
memcpy(tempsta,sta,sizeof(sta));
for(int i=order; i < numord; ++i)
{
//i is the selected order
bool ok = true;
for(int j=start[i]+1; j <= end[i]; ++j)
{
sta[j] += psg[i];
if(sta[j] > cpct)
{
ok = false;
break;
}
}
if(ok == true)
{
dfs(i+1, money+psg[i]*(end[i]-start[i]));
}
memcpy(sta, tempsta, sizeof(sta));
}
}
int main()
{
//
freopen("input.txt","r",stdin);
while(scanf("%d%d%d", &cpct, &numsta, &numord)==3)
{
if(!cpct&&!numsta&!numord)
break;
for(int i=0; i < numord; ++i)
{
scanf("%d%d%d", &start[i], &end[i], &psg[i]);
}
maxmoney = 0;
memset(sta,0,sizeof(sta));
dfs(0,0);
printf("%d\n",maxmoney);
}
}