30分,玄关求条
查看原帖
30分,玄关求条
765713
pengzhining楼主2024/11/2 09:11

WA:#2,#4,#5,#6,#7,#8

subtask过了

测试记录

#include<bits/stdc++.h>
using namespace std;
const int N=1000000;
struct node{
    int av=0,aw=0,bv=0,bw=0;
};
node ma[N];
node ex[N];
int n,m,d[N],mi,ei,u[N];
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        if(c==0){
            ma[i].av=a;
            ma[i].aw=b*a;
        }else{
            u[c]=++ei;
            if(u[c]==2){
                ex[c].bv=a;
                ex[c].bw=a*b;
            }else{
                ex[c].av=a;
                ex[c].aw=a*b;
            }
        }
    }
    for(int i=1;i<=m;i++){
        for(int j=n;ma[i].av && j>=ma[i].av;j--){
            d[j]=max(d[j],d[j-ma[i].av]+ma[i].aw);
            if(j >= ma[i].av + ex[i].av){
                d[j]=max(d[j],d[j - ma[i].av - ex[i].av ]+ ma[i].aw + ex[i].aw);
            }else if(j >= ma[i].av + ex[i].bv){
                d[j]=max(d[j] , d[j - ma[i].av - ex[i].bv] + ma[i].aw + ex[i].bw);
            }else if(j >= ma[i].av + ex[i].bv + ex[i].av){
                d[j]=max(d[j] , d[j - ma[i].av - ex[i].bv - ex[i].av] + ma[i].aw + ex[i].bw + ex[i].aw);
            }
        }
    }
    cout<<d[n];
}
2024/11/2 09:11
加载中...