题目链接:
方法:设F(m)为在第m天累积到的工资,第i个工作开始时间为bi,结束时间ei,工资为si,总共天数M。建立状态转移方程:
{
0, m==0;
F(m) = Max(F(bi-1)+si,F(m)); m>=ei,
F(m), m<ei;
}.
最终F(M)为问题的解。
通过2重循环循环来实现对工作的处理顺序是按照工作的结束时间来的,这样就不需要排序。
感想:需要动点脑筋建下模。
代码:
View Code
#includeusing namespace std;int MyMax(int x,int y){ if(x>=y) return x; else return y;}int main(){ int t,m,n,tc=0;; cin>>t; int records[101]; int starts[1000]; int ends[1000]; int salaries[1000]; while(tc =ends[j]) records[i] = MyMax(records[starts[j]-1]+salaries[j],records[i]); } } cout< <