zoukankan      html  css  js  c++  java
  • POJ 2063 Investment

    思路:

    因为每年存款的利息不变,所以第二年的本金是第一年的本息和,以此类推

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<set>
    #include<vector>
    #include<map>
    #include<algorithm>
    #include<cmath>
    #include<stdlib.h>
    using namespace std;
    #define inf 10000000
    int p[20],can[20],d,dp[50000];
    int getmax(int begin)//本金
    {
        int i,j;
        memset(dp,0,sizeof(dp));
        for(i=0;i<d;i++)    //对每一种存款方式  进行完全背包操作
        {
            for(j=p[i];j<=begin;j++)
            dp[j]=max(dp[j],dp[j-p[i]]+can[i]);
        }
        return dp[begin];   //返回最大的可得利息
    }
    int main()
    {
        int t,mon,year,sum,i,j,leave,tmp;
        cin>>t;
        while(t--)
        {
            cin>>mon>>year>>d;// mon 一开始的本金, year 存的年数, d    存款方式种类数
            leave=mon%1000;   // leave 存的是本金里不能用的钱,也就是小于1000的部分
            mon/=1000;
            tmp=mon;
            for(i=0;i<d;i++){
             cin>>p[i]>>can[i];
             p[i]/=1000;
            }               //因为存款方式中The value of a bond is always a multiple of $1 000,所以除以1000,减少背包的容量
            for(i=1;i<=year;i++)
            {
                sum=getmax(tmp);// sum 用来存改年可得利息
                tmp=sum;    
                mon=leave+mon*1000+tmp;// 更新本金   
                leave=mon%1000;        //更新不能用的钱
                mon/=1000;         
                tmp=mon;               //下一年的本金
            }
            cout<<mon*1000+leave<<endl;
        }
    }
    
  • 相关阅读:
    遍历Map的四种方法
    过滤器和拦截器的区别
    拦截器、过滤器做什么的?
    Linux中常用操作命令
    什么是反射?
    得到字节码的方式有哪三种?
    web考试内容1
    spring注入方式
    PHP基础 第三天
    堆和栈,值传递和地址传递(引用传递)
  • 原文地址:https://www.cnblogs.com/ainixu1314/p/3843392.html
Copyright © 2011-2022 走看看