hdu4501-注意小细节(我的惯性写法)
来源:互联网 发布:stm8 c语言编程 编辑:程序博客网 时间:2024/05/01 21:04
这一题就是把v1,v2和免费商品都看成是他们的背包容积,而这三者之间相互不影响,所以可以用三维的01背包来做。而我一开始的写法是循环:从最大容积到物品的容积;而在这一题中这种写法是错误的,因为即使小于其中一个容积也有可能符合另外的几个容积,例如即使是钱不够了,我也可以用积分或者是免费商品来买。
#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=101;int dp[101][101][6];struct thing{ int v1,v2,t;};int Max(int a,int b){ return a>b?a:b;}thing s[maxn];int main(){ //freopen("in.txt","r",stdin); int n,v1,v2,p; while(~scanf("%d%d%d%d",&n,&v1,&v2,&p)) { memset(dp,0,sizeof(dp)); int MAX=-1; for(int i=0;i<n;i++) { scanf("%d%d%d",&s[i].v1,&s[i].v2,&s[i].t); } for(int i=0;i<n;i++) { for(int j=v1;j>=0;j--) { for(int k=v2;k>=0;k--) { for(int num=p;num>=0;num--) { int temp=0; if(j>=s[i].v1) temp=Max(temp,dp[j-s[i].v1][k][num]+s[i].t); if(k>=s[i].v2) temp=Max(temp,dp[j][k-s[i].v2][num]+s[i].t); if(num>0) temp=Max(temp,dp[j][k][num-1]+s[i].t); dp[j][k][num]=Max(dp[j][k][num],temp); } } } } printf("%d\n", dp[v1][v2][p]); } return 0;}
0 0
- hdu4501-注意小细节(我的惯性写法)
- (HDU4501) 三维01背包 + 惯性写法导致的错误
- 我的注意细节
- 快排中注意的小细节
- USACO注意的小细节
- 值得注意的小细节
- 我的思维惯性
- 我的惯性错误
- CRM所注意的小细节(2)
- CRM所注意的小细节(3)
- CRM所注意的小细节(4)
- c语言注意的小细节
- Erlang中要注意的小细节
- CRM所注意的小细节
- 设置外键时注意的小细节
- 使用OpenCV需要注意的小细节
- svn使用注意的小细节
- c++ #ifndef注意的一个小细节
- 自定义一个字节缓冲区的简单示例
- wireshark的使用教程--用实践的方式帮助我们理解TCP/IP中的各个协议是如何工作的 .
- Extjs加载百度地图,显示不全的问题
- poj1308
- 最长递增子序列
- hdu4501-注意小细节(我的惯性写法)
- c 语言 结构体
- 如何成为一名黑客(How To Become A Hacker)
- android中handler用法总结
- android 消息机制
- NYOJ 1068 ST(线段树之 成段更新+区间求和)
- 动态树 Link-Cut Trees
- 机房收费系统之窗体遍历的实现
- AC自动机