75分求助
查看原帖
75分求助
542961
oilgz楼主2022/7/15 11:12
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=2e3+10,M=1e7+10;
int m,n,l;
int f[M];
struct node{
    int a,s,w;
}num[N];
bool cmp(node x,node y){
    return x.a<y.a;
}
int cnt=0;
int g[N][N];
signed main()
{
//	freopen("C:\\Users\\oilgz\\Desktop\\dp\\data\\data.in","r",stdin);
//	freopen("C:\\Users\\oilgz\\Desktop\\dp\\data\\myans.in","w",stdout);
    memset(f,100,sizeof f);
    cin>>m>>l>>n;
    int sum=0;
    for(int i=1;i<=n;i++){
        int a,s,w;
        cin>>a>>s>>w;
        int t=1;
        while(s>t){
            
            num[++cnt].a=a;
            num[cnt].s=t;
            num[cnt].w=w*t;
            sum+=w*t;
            s-=t;
            t*=2;
        }
        num[++cnt].a=a;
        num[cnt].s=s;
        num[cnt].w=w*s;
        sum+=w*s;
    }
    f[0]=0;
    num[cnt+1].a=l;
    sort(num+1,num+cnt+1,cmp);
    memset(g,100,sizeof g);
    g[0][0]=0;
    for(int i=1;i<=cnt;i++){
        for(int j=m;j>=0;j--){
            if(j>=num[i].s)f[j]=min(f[j],f[j-num[i].s]+num[i].w);
            if(f[j]<=1e9)f[j]+=j*j*(num[i+1].a-num[i].a);
        }
    }
    if(f[m]>=1684322900)cout<<-1;
    else cout<<f[m];
}
2022/7/15 11:12
加载中...