码迷,mamicode.com
首页 > 其他好文 > 详细

小偷题解

时间:2019-10-12 09:17:00      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:code   names   转移   mes   ace   read   using   getchar   int   

小偷题解

一个裸的背包,不过加了一点限制,
鬼知道他为什么被评为紫题
从后向前转移,每次将大于限制时间的清空即可。
即便如此简单,我还调了这么久,我太弱了,WuWuWu

#include<bits/stdc++.h>
using namespace std;
const int N=1006,M=52;
int n,m,dp[N],t[M],num=1,ans=0;
struct xd{int i,c,v;}q[M<<1];
inline int read(){
   int T=0,F=1; char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-') F=-1; ch=getchar();}
   while(ch>='0'&&ch<='9') T=(T<<3)+(T<<1)+(ch-48),ch=getchar();
   return F*T;
}
bool cmp(xd u,xd v){return u.i>v.i;}
int main(){ 
    n=read(),m=read(); 
    for(int i=1;i<=n;++i) t[i]=read();
    for(int i=1;i<=m;++i) q[i].i=read()+1,q[i].v=read(),q[i].c=read();
    sort(q+1,q+m+1,cmp),t[n+1]=1001;
    for(int i=n;i>=1;--i){
        while(num<=m&&q[num].i==i){
           for(int j=q[num].c;j<t[q[num].i];++j) dp[j]=max(dp[j],dp[j-q[num].c]+q[num].v);
           ++num;
        }
        for(int j=t[i];j<t[i+1];++j) dp[j]=0;
    }
    for(int i=0;i<t[1];++i) ans=max(ans,dp[i]);
    printf("%d\n",ans);
    return 0;
}

小偷题解

标签:code   names   转移   mes   ace   read   using   getchar   int   

原文地址:https://www.cnblogs.com/ljk123-de-bo-ke/p/11658158.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!