利用python內建函式,快速統計單詞在文字中出現的次數
阿新 • • 發佈:2022-05-04
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]); }