zoukankan      html  css  js  c++  java
  • dp重拾-完全背包--HDU 4508

    减肥记

    湫湫给了你每日食物清单,上面描述了当天她想吃的每种食物能带给她的幸福程度,以及会增加的卡路里量。

    Input
      输入包含多组测试用例。
      每组数据以一个整数n开始,表示每天的食物清单有n种食物。
      接下来n行,每行两个整数a和b,其中a表示这种食物可以带给湫湫的幸福值(数值越大,越幸福),b表示湫湫吃这种食物会吸收的卡路里量。
      最后是一个整数m,表示湫湫一天吸收的卡路里不能超过m。

      [Technical Specification]
      1. 1 <= n <= 100
      2. 0 <= a,b <= 100000
      3. 1 <= m <= 100000
     
    Output
      对每份清单,输出一个整数,即满足卡路里吸收量的同时,湫湫可获得的最大幸福值。
     
    Sample Input
    3
    3 3
    7 7
    9 9
    10
    5
    1 1
    5 3
    10 3
    6 8
    7 5
    6
     
    Sample Output
    10
    20
     
    一开始dp数组开小了,提示超时改了好多次才弄好。
    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    int v[1001],w[1001];
    int dp[100000];
    int W,n,i;
    int max(int a,int b)
    {
        if(a>=b) return a;
        else return b;
    }
    void solve()
    {
        for(int i=0;i<n;i++)
        {
            for(int j=w[i];j<=W;j++)
            {
                if(j<w[i]) {continue;}
                dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
            }
        }
        cout<<dp[W]<<endl;
    }
    int main()
    {
        while(~scanf("%d",&n))
        {
            for(i=0;i<n;i++)
            {
                scanf("%d%d",&v[i],&w[i]);//a->v b->w
            }
            scanf("%d",&W);
            solve();
            W=0;
            memset(dp,0,sizeof(dp));
        }
        return 0;
    }
    View Code
  • 相关阅读:
    python3中Requests将verify设置为False后,取消警告的方式
    unicode编码转换中文_python
    base64编解码_python
    数据结构学习之二叉树
    springboot全能框架学习之旅
    数据结构之树
    经典的猴子分香蕉问题
    求n个数的排列
    三元运算的应用
    将正整数分解成质因数乘积
  • 原文地址:https://www.cnblogs.com/dzzy/p/5041271.html
Copyright © 2011-2022 走看看