如果仅AC on #2 ,该如何应对啊
查看原帖
如果仅AC on #2 ,该如何应对啊
91737
rex_qwq楼主2023/10/6 09:14

RT,玄关求调

#include<bits/stdc++.h>
//#pragma GCC optimize(3,"Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,fma,popcnt,tune=native")
using namespace std;
#define int  long long
#define kg putchar(' ')
#define endl puts("")
inline int read(){
    int vis=1,ans=0;
    char x=getchar();
    while(x<'0'||x>'9'){
        if(x=='-')vis=-1;
        x=getchar();
    }
    while(x>='0'&&x<='9'){
        ans=ans*10+x-'0';
        x=getchar();
    }
    return vis*ans;
}
inline void print(int x){
    if(x<0)putchar('-'),x=-x;
    if(x>9)print(x/10);
    putchar(x%10+'0');
}
int n;
const int N=6e3+90,inf=1e18;
int dp[2][N*5];
int t[N][4];
int maxn;
signed main(){
    n=read();
    sizeof(dp,0x3f,sizeof(dp));
    dp[0][0]=0;
    for(int i=1;i<=n;i++){
        t[i][1]=read();
        t[i][2]=read();
        t[i][3]=read();
    }
    for(int i=1,vis=1;i<=n;i++,vis^=1){
        maxn+=max(t[i][1],t[i][3]);
        for(int j=maxn;j>=0;j--){
            dp[vis][j]=(!t[i][2]?inf:dp[vis^1][j]+t[i][2]);
            if(j>=t[i][1])dp[vis][j]=min(dp[vis][j],(!t[i][1]?inf:dp[vis^1][j-t[i][1]]));
            if(j>=t[i][3])dp[vis][j]=min(dp[vis][j],(!t[i][3]?inf:dp[vis^1][j-t[i][3]]+t[i][3]));
        }
    }
    int minn=1e9;
    for(int i=0;i<=maxn;i++)minn=min(minn,dp[n%2][i]+i);
    print(minn);
    return 0;
}
2023/10/6 09:14
加载中...