原题 回溯后要把数据改回来。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n,b,m,A[25][3],cap[8],max;
int try1(int u)
{
int i;
for(i=A[u][0];i<A[u][1];i++)
{
cap[i]+=A[u][2];
if(cap[i]>n) return 0;
}
return 1;
}
void search(int cur,int s)
{
if(cur==m)
{
if(max<s) max=s;
}
else
{
int B[8];
memcpy(B,cap,sizeof(B));
search(cur+1,s);
memcpy(cap,B,sizeof(B));
if(try1(cur)) search(cur+1,s+A[cur][2]*(A[cur][1]-A[cur][0]));
memcpy(cap,B,sizeof(B));
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("301.txt","r",stdin);
#endif
while(scanf("%d%d%d",&n,&b,&m)==3 && (n || b || m))
{
int i,j;
for(i=0;i<m;i++)
for(j=0;j<3;j++) scanf("%d",&A[i][j]);
max=0;
search(0,0);
printf("%d\n",max);
}
return 0;
}