WA 0 pts 参考深进P256
查看原帖
WA 0 pts 参考深进P256
732988
JacoAquamarine楼主2023/9/21 18:39

RT,代码如下:

//深进P256
//dp[t+1][v]=min(dp[t][u]+c[v])
#include<iostream>
#include<cstring>
#include<algorithm>
#define rep(a,b,c) for(int a=b;a<=c;a++)
#define LL long long
#define Maxn 260
using namespace std;
LL n,m,T,k,v[Maxn],A[31][Maxn][Maxn],now,last=1,ans;
struct Node{int u,v,t;}node[Maxn];
bool cmp(Node a,Node b){return a.t<b.t;}
int get(int a,int b){return a*n+b-1;}
void G(LL x,LL y){x<y?x=y:0;}
int main(){
	static LL dp[2][Maxn];
	memset(A,0x3f,sizeof(A));
	memset(dp,0x3f,sizeof(dp));
	cin>>n>>m>>T>>k;
	rep(i,1,n)cin>>v[i];
	rep(i,1,m){
		int b,e,w;
		cin>>b>>e>>w;
		A[0][get(4,e)][get(5-w,b)]=v[e];
	}
	rep(i,0,3)rep(j,1,n)A[0][get(i,j)][get(i+1,j)]=0;
	rep(i,0,29)rep(j,0,n*5-1)rep(k,0,n*5-1)rep(l,0,n*5-1)G(A[i+1][j][l],A[i][j][k]+A[i][k][l]);
	dp[0][get(4,1)]=v[1];
	auto trans=[&](int dt){
		rep(j,0,30)if(dt>>j&1){
			swap(now,last);
			memset(dp[now],0x3f,sizeof(dp[now]));
			rep(k,0,n*5-1)rep(l,0,n*5-1)G(dp[now][k],dp[last][l]+A[j][k][l]);
		}
	};
	rep(i,1,k){
		cin>>node[i].t>>node[i].u>>node[i].v;
	}
	sort(node+1,node+1+k,cmp);
	rep(i,1,k){
		int dt=node[i].t-node[i-1].t;
		trans(dt);
		dp[now][get(4,node[i].u)]+=node[i].v;
	}
	trans(T-node[k].t);
	cout<<1ll*(dp[now][get(4,1)]<0?-1:dp[now][get(4,1)]);
	return 0;
}
2023/9/21 18:39
加载中...