poj2063——investment
来源:互联网 发布:大数据包括 编辑:程序博客网 时间:2024/06/05 15:37
题目大意:用一定金额的本金买不同种类的债券,每种债券的价格不同,收益不同,每年的本利和可以做下一年的本金,问给定年份所能得到的最大本利和
输入:测试案例个数
初始资金(<=1000000) 年数(<=40)
债券种类数d(1<=d<=10)
债券i的价格 收益(价格为1000的倍数)
输出:得到的最大本利和
分析:动态规划完全背包问题,债券价格即为物品重量,债券收益即为物品价值,本金就是背包所能承受的重量,每年的收益可以作为下一年的本金,保证每年都获益最大就能得到最后的最优值。注意初始资金过大会导致内存溢出,本金和债券价格都是1000的倍数,所以在这里将本金和债券价格都除以1000来压缩。
这道题相当于每年是一个背包问题,一共years个背包问题相互关联结合,循环years次求最后解。
状态dp[j]:本金为j时的最大收益
结果:sum{dp[si]},s为第i年的本金
状态转移方程:dp[j]=max{dp[j],dp[j-v[i]]+w[i]}
代码:转载自http://blog.csdn.net/libin56842/article/details/9451843
- #include <stdio.h>
- #include <string.h>
- #include <algorithm>
- using namespace std;
- struct node
- {
- int v,w;
- }a[20];
- int dp[100000];
- int main()
- {
- int t,n,i,j,k,val,y;
- scanf("%d",&t);
- while(t--)
- {
- scanf("%d%d",&val,&y);
- scanf("%d",&n);
- for(i = 1;i<=n;i++)
- {
- scanf("%d%d",&a[i].v,&a[i].w);
- a[i].v/=1000;//进行压缩
- }
- for(i = 1;i<=y;i++)
- {
- int s = val/1000;//每年本金都是上一年本金与利息之和
- memset(dp,0,sizeof(dp));//每年都要重新存利息
- for(j = 1;j<=n;j++)//完全背包
- {
- for(k = a[j].v;k<=s;k++)
- {
- dp[k]=max(dp[k],dp[k-a[j].v]+a[j].w);
- }
- }
- val+=dp[s];//每年的最大本利和
- }
- printf("%d\n",val);
- }
- return 0;
- }
阅读全文
0 0
- poj2063——investment
- poj2063 - Investment
- poj2063 Investment
- POJ2063--Investment
- POJ2063 Investment
- POJ2063 Investment
- POJ2063 Investment
- poj2063 Investment
- poj2063 Investment
- 【POJ2063】【Investment】
- poj2063 Investment
- POJ2063-Investment
- POJ2063 Investment
- poj2063(还是背包)Investment
- poj2063 Investment 完全背包
- POJ2063 Investment 【完全背包】
- POJ2063 Investment(完全背包)
- poj2063(Investment)完全背包
- Queue队列
- maven3 手动安装本地jar到仓库
- http协议学习-http代理
- 全美房租最贵TOP20多半都在曼哈顿 月租$3790起
- testng+maven+java+idea 接口测试入门一:项目创建
- poj2063——investment
- pygame游戏之旅13:添加游戏暂停功能
- Hyperscan学习之源码安装---redhat
- CodeForces
- Linux自定义别名alias重启失效问题
- VMware与CentOS7的共享文件夹的问题
- vs2017支持所有版本VC
- nohap启动服务
- Eigen教程-sparse