原题 回溯后要把数据改回来。
#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;
}
C++回溯算法解决数据优化问题
本文探讨了使用C++实现回溯算法解决数据优化问题的方法,具体包括数据结构设计、算法实现细节及效率优化策略。通过实例分析,展示了如何通过回溯算法在特定约束条件下寻找最优解。
790

被折叠的 条评论
为什么被折叠?



