dp之完全背包poj2063
题意:求投资k年获得最大投资,每年都选最大利息的方案进行投资k年后就可以得到最多的人民币。 注意:每一年收到的利息都可以作为下一年的本金......其实从测试数据来看,是很好看出来的...... 思路:将每一年的“体积”加上利息就好,当然,数据太大,可以除以100减少时间和空间复杂度...... 反思:很想说,这些我都想到了,但是还是wa了两次,是因为数据溢出的原因......以前就遇到这样的原因,木有想到这次我注意了,但还是出问题了...... wa代码: #include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int dp[500000],s[100][2];
int main()
{
int text;
scanf("%d",&text);
while(text--)
{
int n,year;
scanf("%d%d",&n,&year);
int h,m=n/100;
scanf("%d",&h);
for(int i=1;i<=h;i++)
{
scanf("%d%d",&s[i][0],&s[i][1]);
s[i][0]/=100;
}
memset(dp,0,sizeof(dp));
int sum=0;
for(int i=1;i<=year;i++)
{ for(int j=1;j<=h;j++)
{
for(int k=s[j][0];k<=m;k++)
if(dp[k]<dp[k-s[j][0]]+s[j][1])
dp[k]=dp[k-s[j][0]]+s[j][1];
}
sum+=dp[m];
m=m+dp[m]/100; //这里数据溢出,要是上一次的m==100,dp[m]==250,这一次的dp[m]==350,那么计算出来的m==105,但是实际应该为106
}
printf("%d\n",sum+n);
}
return 0;
} ac代码: #include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int dp[600000],s[100][2];
int main()
{
int text;
scanf("%d",&text);
while(text--)
{
int n,year;
scanf("%d%d",&n,&year);
int h,m=n/100;
scanf("%d",&h);
for(int i=1;i<=h;i++)
{
scanf("%d%d",&s[i][0],&s[i][1]);
s[i][0]/=100;
}
memset(dp,0,sizeof(dp));
int sum=n;
for(int i=1;i<=year;i++)
{
m=sum/100;
for(int j=1;j<=h;j++)
{
for(int k=s[j][0];k<=m;k++)
if(dp[k]<dp[k-s[j][0]]+s[j][1])
dp[k]=dp[k-s[j][0]]+s[j][1];
}
sum+=dp[m]; //以后的代码要规范写,可以在前面处理了的值不要留在后面处理.......
}
printf("%d\n",sum);
}
return 0;
}
dp之完全背包poj2063的更多相关文章
- hdu1114 Piggy-Bank (DP基础 完全背包)
链接:Piggy-Bank 大意:已知一只猪存钱罐空的时候的重量.现在的重量,已知若干种钱的重量和价值,猪里面装着若干钱若干份,求猪中的钱的价值最小值. 题解: DP,完全背包. g[j]表示组成重量 ...
- 单调队列优化DP,多重背包
单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...
- Codevs1378选课[树形DP|两种做法(多叉转二叉|树形DP+分组背包)---(▼皿▼#)----^___^]
题目描述 Description 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修 ...
- POJ3211 Washing Clothes[DP 分解 01背包可行性]
Washing Clothes Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 9707 Accepted: 3114 ...
- HD1561The more, The Better(树形DP+有依赖背包)
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- [HDOJ5543]Pick The Sticks(DP,01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5543 题意:往长为L的线段上覆盖线段,要求:要么这些线段都在L的线段上,要么有不超过自身长度一半的部分 ...
- zoj3623 Battle Ships ——完全背包?简单DP!|| 泛化背包
link:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3623 看起来像完全背包,但是物品价值是变化的,所以很多人搞的很复 ...
- poj 2184 Cow Exhibition(dp之01背包变形)
Description "Fat and docile, big and dumb, they look so stupid, they aren't much fun..." - ...
- hdoj1010Starship Troopers (树dp,依赖背包)
称号:hdoj1010Starship Troopers 题意:有一个军队n个人要占据m个城市,每一个城市有cap的驻扎兵力和val的珠宝,并且这m个城市的占率先后具有依赖关系,军队的每一个人能够打败 ...
随机推荐
- Windows之权限讲解
windows中,权限指的是不同账户对文件,文件夹,注册表等的访问能力.在windows中,为不同的账户设置权限很重要,可以防止重要文件被其他人所修改,使系统崩溃. 1权限概念 我们可以在控制面板中设 ...
- Why does Typescript use the keyword “export” to make classes and interfaces public?
原文: https://stackoverflow.com/questions/15760462/why-does-typescript-use-the-keyword-export-to-make- ...
- 修改ubuntu下网卡名不是eth0的问题
sudo nano /etc/default/grub 找到GRUB_CMDLINE_LINUX=""改为GRUB_CMDLINE_LINUX="net.ifnames= ...
- easyui messager alert 三秒后自动关闭提示
$.messager.alert(' ','<font size=\"2\" color=\"#666666\"><strong>数据库 ...
- easyui window refresh 刷新两次解决办法
这样写刷新两次 $("#windowid").window('refresh','url01.php'); $("#windowid").window('ope ...
- (C++)已知String类的定义,实现其函数体
CString类的定义如下: class CMyString{ public: CMyString(const char* pData=NULL); CMyString(const CMyString ...
- vscode - 移动端适配(cssrem)
建议使用Chrome浏览器. 1.第一步,安装扩展以及配置 2.第二步,使用(记得按一下↓)
- myeclipse报异常:java.lang.OutOfMemoryError: Java heap space
- Jquery重新学习之二[属性attr(),removeAttr(),prop(),removeProp()]
1:属性.attr(name|pro|key,val|key,fn)与removeAttr(name) 1.1 .attr(name) 参数name为属性名称 <a id="my_hr ...
- Linux-正则表达式的POSIX规范及流派
Linux/Unix工具与正则表达式的POSIX规范 对正则表达式有基本了解的读者,一定不会陌生『\d』.『[a-z]+』之类的表达式,前者匹配一个数字字符,后者匹配一个以上的小写英文字母.但是如果你 ...