Mochila múltiple boca grande codiciosa dp

7-4 Boca grande codiciosa (15 puntos)
Hay una boca grande muy codiciosa, le gusta comer un pastel pequeño, y cada pastel pequeño tiene una delicia, y la boca grande es muy arrogante, debe comer pasteles pequeños que son deliciosos y solo m, y la boca grande es muy perezosa, espera lograr este objetivo comiendo la menor cantidad de pasteles pequeños, por lo que espera que puedas diseñar un programa que la ayude a decidir qué pasteles pequeños comer.

Formato de entrada:
primero ingrese una línea que contenga 2 números enteros myn, lo que significa que el boca grande necesita comer pasteles pequeños con delicia y m, y hay n tipos de pasteles pequeños. Ingrese n líneas a continuación, cada línea con 2 números enteros, el primero indica la delicia de este tipo de pequeños pasteles, y el segundo indica el número total de este tipo de pequeños pasteles en la pastelería

Formato de salida: La
línea de salida contiene un número entero que indica el número mínimo de pasteles pequeños que Big Mouth necesita comer. Si Big Mouth no puede alcanzar la suma de m delicias comiendo pasteles pequeños, dará como resultado "> <".

Ejemplo de entrada:
aquí hay un conjunto de entrada. P.ej:

10 2
4 1
2 10
Ejemplo de salida:
Aquí está la salida correspondiente. P.ej:

4
Ejemplo
de entrada: Aquí se proporciona un conjunto de entrada. P.ej:

10 2
4 1
7 3
Muestra de salida:
Aquí está la salida correspondiente. P.ej:

<

Solución: Este es un problema de múltiples mochilas.
Dos soluciones La
primera
está representada por dp, la menor cantidad de trozos de pastel que se comen cuando la delicia es i.
Entonces su ecuación de transferencia es dp [k] = min (dp [k], dp [kv [i]] + 1);
hay un total de tres ciclos, que representan el número de tipos de pasteles, el número de cada tipo de torta y la delicia correspondiente El menor número de tortas consumidas en un grado.
el código se muestra a continuación:

#include <bits/stdc++.h>
#include <algorithm>
#include<iostream>
#include <stdio.h>
#define INF 0x3f3f3f3f
const int maxn=500005;
using namespace std;
typedef long long ll;
int dp[maxn];
int a[maxn];
int v[maxn];
int main(){
    
    
    int m,n,t,va;
    cin>>m>>n;
    memset(dp,INF,sizeof(dp));
    for(int i=1;i<=n;i++){
    
    
        cin>>va>>t;
        //dp[va]=1;
    /*
        for(int k=1;k<=t;k++){
            a[s+k]=v;
        }
        s+=t;*/
        v[i]=va;
        a[i]=t;
    }
    //cout<<s<<endl;;
    dp[0]=0;
    for(int i=1;i<=n;i++){
    
    
        for(int j=1;j<=a[i];j++){
    
    
            for(int k=m;k>=v[i];k--){
    
    
               if(k-v[i]>=0){
    
    
                    //dp[i-a[j]*k]=k;
                    dp[k]=min(dp[k],dp[k-v[i]]+1);
                }
                //if(k-a[i]==0)
                   //f=1;
                //cout<<"i="<<k<<"dp[i]="<<dp[k]<<endl;
            }
        }
    }
    if(dp[m]!=INF)
        cout<<dp[m]<<endl;
    else
        cout<<"><"<<endl;
    return 0;
}

El segundo método: convierte esta mochila múltiple en una mochila normal 0-1. Si hay varias mochilas del mismo tipo, solo necesitas sacar las tortas del mismo tipo una a una, y el modelo en este momento se convierte en One de la mochila 0-1 más simple.
Código

#include <bits/stdc++.h>
#include <algorithm>
#include<iostream>
#include <stdio.h>
#define INF 0x3f3f3f3f
const int maxn=500005;
using namespace std;
typedef long long ll;
int dp[maxn];
int a[maxn];
int v[maxn];
int main(){
    
    
    int m,n,t,va;
    cin>>m>>n;
    memset(dp,INF,sizeof(dp));
    int s=0;
    for(int i=1;i<=n;i++){
    
    
        cin>>va>>t;
        //dp[va]=1;
        for(int k=1;k<=t;k++){
    
    
            a[s+k]=va;
        }
        s+=t;
    }
    //cout<<s<<endl;
    dp[0]=0;
    for(int i=1;i<=s;i++){
    
    
        for(int j=m;j>=a[i];j--){
    
    
            dp[j]=min(dp[j],dp[j-a[i]]+1);

        }
    }
    if(dp[m]!=INF)
        cout<<dp[m]<<endl;
    else
        cout<<"><"<<endl;
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/u011612364/article/details/108908591
Recomendado
Clasificación