好题dp+排序+贪心——SEERC 2019

Posted zsben991126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了好题dp+排序+贪心——SEERC 2019相关的知识,希望对你有一定的参考价值。

/*
首先考虑dp状态:dp[i][j][k]表示考虑了前i个任务,凑成的第一级经验是j,第二级经验是k的用时
由于一级完成任务溢出的经验会给二级,所以任务完成顺序是对结果有影响的:
    3 10 2
    5 3 4 2
    5 4 3 3
    2 5 1 4
    这组数据,如果先完成任务一或任务二,那么最终是完不成升两级的 
    那么对于一级完成的任务而言,经验越多的任务放在越后面就越好
所以一开始要给任务以x进行升序排序     
*/
#include<bits/stdc++.h>
using namespace std;
#define N 1005
#define ll long long

const ll INF=0x3f3f3f3f3f3f3f3f;

struct Node {
    ll x,t,y,r;
}p[N];
ll n,s1,s2,dp[2][N][N];

int cmp(Node a,Node b){return a.x<b.x;}

int main(){
    cin>>n>>s1>>s2;
    for(int i=1;i<=n;i++)
        cin>>p[i].x>>p[i].t>>p[i].y>>p[i].r;
    memset(dp,0x3f,sizeof dp);
    dp[0][0][0]=0;
    
    sort(p+1,p+1+n,cmp);
    
    int cur=0;
    for(int i=1;i<=n;i++) {
        memcpy(dp[cur^1],dp[cur],sizeof dp[cur]);
        for(int j=0;j<=s1;j++)
            for(int k=0;k<=s2;k++)if(dp[cur][j][k]!=INF){
                //p[i]用在第一级上
                if(j<s1){
                    int nxt=j+p[i].x;
                    if(nxt<=s1)
                        dp[cur^1][nxt][k]=min(dp[cur^1][nxt][k],dp[cur][j][k]+p[i].t);
                    else {
                        int tmp=nxt-s1+k;if(tmp>s2)tmp=s2;
                        dp[cur^1][s1][tmp]=min(dp[cur^1][s1][tmp],dp[cur][j][k]+p[i].t);
                    } 
                }
                
                //p[i]用在第二级上
                int nxt=k+p[i].y;if(nxt>s2)nxt=s2;
                dp[cur^1][j][nxt]=min(dp[cur^1][j][nxt],dp[cur][j][k]+p[i].r); 
            }
            
        cur^=1;
    }
    
    if(dp[cur][s1][s2]==INF || dp[cur][s1][s2]==0)cout<<-1<<
;
    else cout<<dp[cur][s1][s2]<<"
";
}
/*
2 3 4
3 3 1 1
4 1 4 1 
*/

 

以上是关于好题dp+排序+贪心——SEERC 2019的主要内容,如果未能解决你的问题,请参考以下文章

cf1061D 贪心+multiset 好题!

DP 好题Kick Start 2019 Round C Catch Some

POJ 2054 Color a Tree#贪心(难,好题)

2019.09.22SEERC2018

20172018-acmicpc-southeastern-european-regional-programming-contest-seerc-2017-en A - Concerts

Selling Souvenirs CodeForces - 808E (分类排序后DP+贪心)