社区讨论
60pts求调(玄关)
P5052 [COCI 2017/2018 #7] Go参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mhj42iq8
- 此快照首次捕获于
- 2025/11/03 20:23 4 个月前
- 此快照最后确认于
- 2025/11/03 20:23 4 个月前
大样例都过了60pts hack没过,救救吧。
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
int dp[105][105][2005][2];
int n,k,m;
struct node
{
int w,t;
bool operator <(const node &f) const
{
return t<f.t;
}
};
int sum[1005][105];
vector<node> op[1005];
int id[1005],cnt=0;
int pal(int x,int t)
{
int l=0,r=op[x].size()+1;
while(l+1<r)
{
int mid=(l+r)/2;
if(op[x][mid-1].t<t) r=mid;
else l=mid;
}
return sum[x][l];
}
signed main()
{
// freopen("go.in","r",stdin);
// freopen("go.out","w",stdout);
cin>>n>>k>>m;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
op[x].push_back({y,z});
}
for(int i=1;i<=n;i++)
{
sort(op[i].begin(),op[i].end());
if(op[i].size()>0) id[++cnt]=i;
for(int j=1;j<=op[i].size();j++) sum[i][j]=sum[i][j-1]+op[i][j-1].w;
}
id[cnt+1]=1e18;
int pos=0;
for(int i=1;i<=cnt;i++)
{
if(id[i]==k)
{
pos=i;
break;
}
}
if(pos==0)
{
for(int i=0;i<=cnt;i++)
{
if(k>id[i]&&k<id[i+1])
{
for(int j=cnt;j>=i+1;j--)
{
id[j+1]=id[j];
}
id[i+1]=k;
pos=i+1;
break;
}
}
cnt++;
}
for(int i=1;i<=cnt;i++)
{
for(int j=i;j<=cnt;j++)
{
for(int k=1;k<=2000;k++) dp[i][j][k][0]=dp[i][j][k][1]=-1e18;
}
}
dp[pos][pos][1][0]=dp[pos][pos][1][1]=sum[pos][op[id[pos]].size()];
for(int k=2;k<=2000;k++)
{
for(int len=2;len<=cnt;len++)
{
for(int i=1;i<=cnt-len+1;i++)
{
int j=i+len-1;
if(k>id[i+1]-id[i])dp[i][j][k][0]=max(dp[i][j][k][0],dp[i+1][j][k-(id[i+1]-id[i])][0]+pal(id[i],k+1));
if(k>id[j]-id[i])dp[i][j][k][0]=max(dp[i][j][k][0],dp[i+1][j][k-(id[j]-id[i])][1]+pal(id[i],k+1));
if(k>id[j]-id[i])dp[i][j][k][1]=max(dp[i][j][k][1],dp[i][j-1][k-(id[j]-id[i])][0]+pal(id[j],k+1));
if(k>id[j]-id[j-1])dp[i][j][k][1]=max(dp[i][j][k][1],dp[i][j-1][k-(id[j]-id[j-1])][1]+pal(id[j],k+1));
}
}
}
int maxn=0;
for(int i=2;i<=2000;i++) maxn=max(maxn,dp[1][cnt][i][0]),maxn=max(maxn,dp[1][cnt][i][1]);
cout<<maxn;
return 0;
}
/*
79 3 14
13 82 4
14 17 8
20 65 23
27 91 4
33 23 54
34 14 2
36 29 37
37 41 31
48 6 59
50 85 22
52 92 56
59 97 101
75 77 9
77 18 35
65+23+29+6+92+97
*/
回复
共 3 条回复,欢迎继续交流。
正在加载回复...