Programación dinámica: el problema de la mochila

Problema de la mochila: Hay M joyas con diferentes valores, y el tiempo para que el ladrón robe cada joya también es diferente. Es necesario poner tantas joyas en la mochila como sea posible antes de que la seguridad se entere, y al mismo tiempo, debe asegurarse de que el valor total de las joyas en la mochila sea el mayor

Supongamos: el tamaño de la mochila es M[][], el valor de las joyas robadas en el tiempo t es V[100] y el tiempo de cada joya robada es tiempo[t]

Robar la i-ésima joya en el tiempo t, y el tiempo actual es t, luego juzgar la joya actual,

Sea el valor en la mochila después del último robo más el valor v[i] de esta joya: m[i-1][ t-time[i] ],

Si la joya no es robada, entonces: m[i-1][t]

Ecuación de transición de estado: M[i] [j]= max{ v[i]+m[i-1][j-time[i] , m[i-1][t]}

#include<stdio.h>

int TotalTime, num;    //设置总时间和珠宝数量
int value[100],time[100],m[1000][1000];
int main(){
    printf("输入总时间和珠宝数量\n")
    scanf("%d,%d",&TotalTime,&num);
    printf("输入每个珠宝的时间和珠宝价值\n")
    for(int i = 0; i<num; i++){
        scanf("%d,%d",&time[i],&value[i]);
        printf("\n");
    }
    for(int i = 0; i<num; i++){
        for(int t=TotalTime;t>0;t--){    //剩余时间
            if(time[t]<t){    //当前珠宝偷窃时间足够
                int value1 = m[i-1][t-time[t]+v[i];
                int value2 = m[i-1][t];    //如果不采集,时间不变
                m[i][t] = (value1>value2 : value1?value2);
            }
        }        
    }
    printf("偷窃总价值为:%d",m[num][TotalTime]);
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_37504771/article/details/124003621
Recomendado
Clasificación