A&B&C&D&E 1000+1200+1400+1700+1800
日常水,注意D从后往前贪心
sort(a+1,a+1+n,cmp);
for(int i=1;i<=m;i++){
while(a[l].d<=i){q.push(a[l].q);l++;}
if(q.size()){
ans+=q.top();q.pop();
}
}
F 840->2100
DP优化了吗?如优化
cin>>n>>k;f[1][0]=1;
for(;l<=n;l=r+1){
r=n/(n/l);
x[++cnt]=r-l+1;
}
for(int i=0;i<=k;i++)
for(int j=1;j<=cnt;j++)
f[cnt-j+1][i+1]=(f[cnt-j+2][i+1]+(x[j]*f[j][i])%mod)%mod;
cout<<f[1][k+1];
G 0->2400
#include <bits/stdc++.h>
#define MX 50005
#define GP pair<int,int>
#define MP make_pair
#define int long long
using namespace std;
vector<GP> o[MX];
int num,res[MX],f[70],dm=62;
int n,m,k;bool ck[MX];
void add(int x){
for(int i=dm;i>=0;i--)
if((x>>i)&1){
if(!f[i]){f[i]=x;break;}
x^=f[i];
}
}
void dfs(int u,int p){
res[u]=p;ck[u]=1;
for(auto eg:o[u]){
int v=eg.first,l=eg.second;
if(ck[v]){add(p^l^res[v]);}
else{dfs(v,p^l);}
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b,c;cin>>a>>b>>c;
o[a].push_back(MP(b,c));
o[b].push_back(MP(a,c));
}dfs(1,0);
k=res[n];
for(int i=dm;i>=0;i--){
if((k^f[i])>=k)
k^=f[i];
}
cout<<k;
return 0;
}
H 0
?