zoukankan      html  css  js  c++  java
  • poj 2063完全背包

    题意:给出总资金和投资年份 ,n个股票 给出股票价格和其一年的利润。问如何选择能获得最大利润。

    思路:股票可以重复选择,完全背包问题,完全背包也是从01背包衍生而行的,其主要区别在于中间那层循环的次序不同,因为完全背包没有次数的限制,因而其当前状态会受到之前选择的状态影响。

    这题由于每个股票的价格都是1000为单位的,所以将价格除掉1000,优化内存。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,T,price,year,sum;
    int v[20],w[20],dp[200005];
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&price,&year);
            scanf("%d",&n);
            for(int i=0;i<n;i++)
            {
                scanf("%d%d",&v[i],&w[i]);
                v[i]/=1000;
            }
            sum=0;
            for(int i=0;i<year;i++)
            {
                memset(dp,0,sizeof(dp));
                sum=price/1000;       //可投资的钱
                for(int j=0;j<n;j++)
                {
                    for(int k=0;k<=sum;k++)
                    {
                        if(k>=v[j])
                        {
                            dp[k]=max(dp[k],dp[k-v[j]]+w[j]);
                        }
                    }
                }
                price+=dp[sum];   //资金加上投资获得的利润
            }
            printf("%d
    ",price);
        }
        return 0;
    }
    


     

  • 相关阅读:
    bootstrap
    前端框架 angularjs
    JAva集合框架
    圣诞
    IDEA
    科目三
    Bootstrap简介及Bootstrap里的栅格系统col-md/sm/xs-x;
    C# Windows service 定时发邮件功能 (用到webService)
    <转> 数据库索引的作用和优点缺点
    小知识
  • 原文地址:https://www.cnblogs.com/amourjun/p/5134117.html
Copyright © 2011-2022 走看看