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;
}