我不会··看看
回复 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[]为个结束时间的最大效益,并对输入的数据按照结束时间排序