• 繁华模拟赛 最优得分


    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #define ll long long
    using 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")))
  • 相关阅读:
    函数模板
    三次握手四次分手
    多态
    函数指针与多态
    继承和派生
    使用ntp 实现时间同步
    Hadoop之Mapreduce 程序
    hadoop学习笔记二
    hadoop学习笔记 一
    大数据知识和资料总结
  • 原文地址:https://www.cnblogs.com/hyfer/p/5875126.html
Copyright © 2020-2023  润新知