首页 > 代码库 > 繁华模拟赛 最优得分

繁华模拟赛 最优得分

技术分享

技术分享

技术分享

技术分享

#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#define ll long longusing namespace std;const int maxn = 1005,maxt = 3005,maxint = 987654321;struct query{    ll a;    ll b;    ll c;    friend bool operator <(query x,query y){        return y.b * x.c < x.b * y.c;     }};int n,t,dp[maxt];query q[maxn];void input(){    cin>>n>>t;    for(int i = 1;i <= n;i++){        scanf("%d%d%d",&q[i].a,&q[i].b,&q[i].c);    }    sort(q+1,q+1+n);    memset(dp,-1,sizeof(dp));    dp[0] = 0;}void work(){    for(int i = 1;i <= n;i++){        for(int j = t;j >= q[i].c;j--){            if(dp[j-q[i].c] != -1 && dp[j] < dp[j-q[i].c] + q[i].a - q[i].b * j)                dp[j] = dp[j-q[i].c] + q[i].a - q[i].b * j;        }    }    int ans = 0;    for(int i = 0;i <= t;i++) ans = max(ans,dp[i]);    cout<<ans<<endl;}int main(){    //freopen("score.in","r",stdin);    //freopen("score.out","w",stdout);    int T;    cin>>T;    while(T--){        input();        work();    }    return 0;}#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<stack>#include<cstdlib>#include<string>#include<bitset>#include<ctime>#define INF 1000000000#define N 3005#define fi first#define se second#define debug(x) cerr<<#x<<"="<<x<<endl#define MP(x,y) make_pair(x,y)using namespace std;typedef long long LL;typedef pair<int,int> pii;struct Data{    int a,b,c;}p[N];bool operator < (Data a,Data b){    return a.c*b.b<b.c*a.b;}inline void upd(int &x,int y){    if(x<y) x=y;}int dp[N];int main(){    int T,n,t,j,fn,ans=0,i;    //freopen("score.in","r",stdin);    //freopen("score.out","w",stdout);    //int t1=clock();    cin>>T;    while(T--)    {        ans=0;        cin>>n>>t;        for(i=1;i<=n;i++)            scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);        sort(p+1,p+1+n);        memset(dp,-1,sizeof(dp));        dp[0]=0;        for(i=1;i<=n;i++)        {            //debug(p[i].a);            fn=p[i].a-p[i].b*t;            //debug(fn);            for(j=t;j>=p[i].c;j--,fn+=p[i].b)                if(dp[j-p[i].c]!=-1)                    upd(dp[j],dp[j-p[i].c]+fn);        }        for(i=0;i<=t;i++)            upd(ans,dp[i]);        cout<<ans<<endl;    }    //debug(clock()-t1);    return 0;}// davidlee1999WTK 2015/// srO myk Orz//ios::sync_with_stdio(false);//#pragma comment(linker, "/STACK:102400000,102400000")//#define O2 __attribute__((optimize("-O2")))

 

繁华模拟赛 最优得分