OJ-Problems-Source/HDOJ/5188_lvshubao1314.cpp

74 lines
1.8 KiB
C++
Raw Normal View History

2017-09-11 21:58:06 +08:00
/**
hdu5188 01
n道题i题用时ti秒vili时间点之前不能做出来ti时间内把它做完
w分的最小用时是多少
01li分钟前不能AC的限制i道题必须在最早第li-til-t递增排序
*/
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
struct note
{
int t,v,l;
bool operator <(const note &other)const
{
return l-t<other.l-other.t;
}
}node[35];
int n,m;
int dp[3000005];
int main()
{
while(~scanf("%d%d",&n,&m))
{
int sum=0,ans=0,up=0;
for(int i=0;i<n;i++)
{
scanf("%d%d%d",&node[i].t,&node[i].v,&node[i].l);
sum+=node[i].v;
ans+=node[i].t;
up=max(up,node[i].l);
}
if(m>sum)
{
printf("zhx is naive!\n");
continue;
}
sort(node,node+n);
up=max(up,ans);
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
{
for(int j=up;j>=node[i].l;j--)
{
if(j>=node[i].t)
{
dp[j]=max(dp[j],dp[j-node[i].t]+node[i].v);
}
}
}
int flag=0;
for(int i=0;i<=up;i++)
{
if(dp[i]>=m)
{
printf("%d\n",i);
flag=1;
break;
}
}
if(flag==0)
{
printf("zhx is naive!\n");
}
}
return 0;
}