View Code
1 #include2 #include 3 #include 4 using namespace std; 5 struct node{ 6 int l,r,val; 7 }aa[1001]; 8 int cmp( const void *a , const void *b ) 9 { 10 node *c = (node *)a; 11 node *d = (node *)b; 12 if(c->l != d->l) return c->l - d->l; 13 else return c->r - d->r; 14 }15 int dp[1001];16 int main(){17 int n,m,r,ans,i,a,b,c,j;18 scanf("%d%d%d",&n,&m,&r);19 for(i=0;i =aa[j].r)31 dp[i]=max(dp[i],dp[j]+aa[i].val);32 }33 ans=max(ans,dp[i]);34 }35 ans=max(ans,dp[0]);36 printf("%d\n",ans);37 return 0;38 }
这道题的思想就是DP;
首先,排序,然后,dp[i]代表的是在0到 i 段时间段之间所能得到的最多的牛奶质量。
所以,当第一层循环到 i 时,aa[i] 如果取则 dp[i]=dp[j]+aa[i].val;(注意此时,dp[i]!=dp[i-1]+aa[i].val,因为有时间段的原因,可能 dp[i-1] 更本就不符合条件)
如果不取,则 dp[i]=dp[i];