1. 程式人生 > 其它 >Nginx通過二級目錄(路徑)對映不同的反向代理,規避IP+埠訪問

Nginx通過二級目錄(路徑)對映不同的反向代理,規避IP+埠訪問

NASA的食物計劃

題目傳送門

題目告訴我們要在體積和重量都不超過的情況下輸出最大卡路里,稍微思考一下就可以發現這題是一道01揹包的變形題(01揹包不會的點這裡)。

並且01揹包需要空間優化。

那我們就照dp的角度去想

動態轉移方程

\[dp[i][j]表示使用質量為i,體積為j時的最大卡路里 \] \[dp[i][j]=max(dp[i][j],dp[i-z][j-t]+kj) \] \[方程中z為質量,t為體積,kj為卡路里 \]

蒟蒻不會英文

注意,由於是01揹包所以質量和體積要從大到小迴圈

#include<bits/stdc++.h>
using namespace std;

struct node
{
    int kj,z,t;//從左到右依次為:食物的卡路里、質量、體積
}food[600];

int n,z,t;
int dp[5000][5000];//dp陣列

int main()
{
    scanf("%d%d",&t,&z);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d%d",&food[i].t,&food[i].z,&food[i].kj);
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=z;j>=food[i].z;j--)//迴圈質量
        {
            for(int k=t;k>=food[i].t;k--)//迴圈體積
            {
                dp[j][k]=max(dp[j][k],dp[j-food[i].z][k-food[i].t]+food[i].kj);//方程
            }
        }
    }
    printf("%d",dp[z][t]);
}