我不会··看看
回复 15楼 笑傲
如果在一天内的完成的在这个程序就不能运行了。。。。比如
输入:
4
1 2 10
3 6 20
2 6 25
1 1 15
结果:
40
我用这个程序就会出错,,运行不出结果....
程序代码:#include<stdio.h>
long int t,n,a[30000][3],best[100000],bestw; /* bestw为划分阶段的最优,与best[i]比较选择最优的*/
void qsort(int l,int r);
int partion(int l,int r);
int main()
{
long int i,j,num=1,max;
t=1;
while(num++<=t)
{
max=0;
scanf("%ld",&n);
for(i=0;i<n;i++)
{
scanf("%ld%ld%ld",&a[i][0],&a[i][1],&a[i][2]);
}
qsort(0,n); /*对a按照结束时间排序*/
max=a[n-1][1]; /*找出结束时间最晚者,即为a排好序之后的最后面的元素*/
best[0]=0;
for(i=1,j=0;i<=max;i++)
{
best[i]=best[i-1];
for(;j<n&&a[j][1]==i;j++)
{
bestw=best[a[j][0]]+a[j][2];
if(best[i]<bestw) /*选择最优策略*/
best[i]=bestw;
}
}
printf("%ld\n",best[max]);
}
return(0);
}
void qsort(int l,int r)
{
int q;
if(l<r)
{
q=partion(l,r);
qsort(l,q);
qsort(q+1,r);
}
}
int partion(int l,int r)
{
int i,j,temp,k;
temp=a[l][1];
i=l+1;
j=r-1;
while(1)
{
while(a[i][1]<temp&&i<r) i++;
while(a[j][1]>=temp&&j>l)j--;
if(i>=j)
break;
k=a[i][1];
a[i][1]=a[j][1];
a[j][1]=k;
k=a[i][0];
a[i][0]=a[j][0];
a[j][0]=k;
k=a[i][2];
a[i][2]=a[j][2];
a[j][2]=k;
}
a[l][1]=a[j][1];
a[j][1]=temp;
temp=a[l][0];
a[l][0]=a[j][0];
a[j][0]=temp;
temp=a[l][2];
a[l][2]=a[j][2];
a[j][2]=temp;
return(j);
}
动态规划best[]为个结束时间的最大效益,并对输入的数据按照结束时间排序