01背包60分
查看原帖
01背包60分
181715
gjh303987897楼主2021/11/20 17:32
#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxn 1000001
using namespace std;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch<='9'&&ch>='0'){
        x=(x<<3)+(x<<1)+(ch^48);
        ch=getchar();
    }
    return x*f;
}
struct data{
    int a,b,c;
    bool vis;
    string s;
}t[maxn];

int v[maxn],f[maxn];
int n,m,js;
int main()
{
    m=read(); n=read();
    for(int i=1;i<=n;i++){
        t[i].a=read(); t[i].b=read(); t[i].c=read(); cin>>t[i].s;
    }
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(t[i].s==t[j].s){
                 t[i].a+=t[j].a; t[j].vis=true;
            }
        }
    }
    for(int i=1;i<=n;i++){
        if(t[i].vis==true) continue;
        if(t[i].c>=t[i].a){
            v[++js]=t[i].b*t[i].a;
        }else{
            while(t[i].a>t[i].c){
                t[i].a-=t[i].c; v[++js]=t[i].b*t[i].c;
            }
            v[++js]=t[i].a%t[i].c*t[i].b;
        }
    }
    for(int i=1;i<=js;i++){
        for(int j=21-m;j>=0;j--){
            f[i]=max(f[i-1],f[i-1]+v[i]);
        }
    }
    cout<<f[21-m];
    return 0;
}
2021/11/20 17:32
加载中...