mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
53497060fc
4300-4399
78 lines
2.0 KiB
C++
78 lines
2.0 KiB
C++
#include<iostream>
|
|
#include<cstdio>
|
|
#include<cstring>
|
|
#include<queue>
|
|
#include<set>
|
|
#include<map>
|
|
#include<vector>
|
|
#include<stack>
|
|
#include<cmath>
|
|
#include<string>
|
|
#include<algorithm>
|
|
using namespace std;
|
|
typedef long long ll;
|
|
const int sigma_size=26;
|
|
const int N=200+100;
|
|
const int MAXN=40000+100;
|
|
const double eps=1e-8;
|
|
const int inf=0x3fffffff;
|
|
const int mod=1000000000+7;
|
|
#define L(x) (x<<1)
|
|
#define R(x) (x<<1|1)
|
|
int n,T;
|
|
int dp[MAXN],res[MAXN],st[MAXN];
|
|
struct node{
|
|
int x,y,t,val;
|
|
}p[N];
|
|
vector<int>G[N];
|
|
bool judge(node a,node b){
|
|
return a.x*b.y == b.x*a.y;
|
|
}
|
|
bool cmp(int a,int b){
|
|
return p[a].x*p[a].x+p[a].y*p[a].y<p[b].x*p[b].x+p[b].y*p[b].y;
|
|
}
|
|
int main()
|
|
{
|
|
int kase=0;
|
|
while(~scanf("%d%d",&n,&T)){
|
|
for(int i=1;i<=n;i++)
|
|
scanf("%d%d%d%d",&p[i].x,&p[i].y,&p[i].t,&p[i].val);
|
|
int cnt=0;
|
|
for(int i=1;i<=n;i++){
|
|
int flag=1;
|
|
for(int j=0;j<cnt;j++){
|
|
if(!flag)
|
|
break;
|
|
if(judge(p[i],p[G[j][0]])){
|
|
G[j].push_back(i);
|
|
flag=0;
|
|
}
|
|
}
|
|
if(!flag)
|
|
continue;
|
|
G[cnt].clear(); G[cnt++].push_back(i);
|
|
}
|
|
memset(dp,0,sizeof(dp));
|
|
for(int i=0;i<cnt;i++){
|
|
sort(G[i].begin(),G[i].end(),cmp);
|
|
memcpy(res,dp,sizeof(dp));
|
|
memcpy(st,dp,sizeof(dp));
|
|
int val=0,t=0;
|
|
for(int j=0;j<G[i].size();j++){
|
|
int id=G[i][j];
|
|
t+=p[id].t; val+=p[id].val;
|
|
if(t>T)
|
|
break;
|
|
for(int k=T;k>=t;k--)
|
|
if(res[k]<=res[k-t]+val)
|
|
res[k]=res[k-t]+val;
|
|
for(int k=t;k<=T;k++)
|
|
dp[k]=max(dp[k],res[k]);
|
|
memcpy(res,st,sizeof(st));
|
|
}
|
|
}
|
|
printf("Case %d: %d\n",++kase,dp[T]);
|
|
}
|
|
return 0;
|
|
}
|