P1509 找啊找啊找GF 二维背包
题意:给出n个女朋友,每个女朋友有花费的钱数,花费的人品值,花费的时间
让我们在拥有最多女朋友的情况下,花费时间最少
思路:这是一道二维背包的题,我们开二维来进行dp
比二维背包多了内容就是,要花费时间最少,那么我们就只需要多增加一个内容
就是:在拥有女朋友一样多的数据中,寻找花费钱数最少的情况 ;
即:ans[j][k]=min(ans[j][k],ans[j-v[i]][k-w[i]]+t[i]);
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e2+10; 4 int dp[maxn][maxn]; 5 int ans[maxn][maxn]; 6 int v[maxn],w[maxn],t[maxn]; 7 int main() 8 { 9 int n; 10 scanf("%d",&n); 11 for(int i=1;i<=n;i++){ 12 scanf("%d%d%d",&v[i],&w[i],&t[i]); 13 } 14 int vsum,wsum; 15 scanf("%d%d",&vsum,&wsum); 16 for(int i=1;i<=n;i++){ 17 for(int j=vsum;j>=v[i];j--) 18 for(int k=wsum;k>=w[i];k--){ 19 if(dp[j][k]<dp[j-v[i]][k-w[i]]+1){ 20 dp[j][k]=dp[j-v[i]][k-w[i]]+1; 21 ans[j][k]=ans[j-v[i]][k-w[i]]+t[i]; 22 } 23 else if(dp[j][k]==dp[j-v[i]][k-w[i]]+1){ 24 ans[j][k]=min(ans[j][k],ans[j-v[i]][k-w[i]]+t[i]); 25 } 26 } 27 } 28 printf("%d\n",ans[vsum][wsum]); 29 return 0; 30 31 }