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 }
View Code

 

      

 

    

posted @ 2020-04-06 21:06  古比  阅读(110)  评论(0编辑  收藏  举报