博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeForces 366C Dima and Salad
阅读量:5214 次
发布时间:2019-06-14

本文共 1147 字,大约阅读时间需要 3 分钟。

题意::n个物品,k为倍数。每个物品有两个属性(ai和bi),求在满足所取物品的a属性和是b属性和的k倍的前提下,问a属性的最大值是多少,具体看样例解释,很清楚。

思路:这个题真的是学到了, 对于公式进行变换,然后转化为一部分正数和一部分负数,然后分别求背包,,对于背包,之前一直有一个误区。正确的应该是对于dp[i[代表i体积全部装满所代表的最大价值,因为他可以从背包的转移方程中的出dp[i]=max(dp[i],dp[i-c[i]]+a[i]);这个方程中指出,目前的答案是由减去体积的地方转移来的,而01背包是倒着进行计算,所以的到满体积时的价值

代码:

#include 
using namespace std;const int maxn=105;int n,k,a[maxn],b[maxn],c[maxn],dp[10005],pp[10006];int main(){ while(~scanf("%d%d",&n,&k)){ memset(dp,-0x3f,sizeof(dp)); memset(pp,-0x3f,sizeof(pp));// memset(c,0,sizeof(c)); dp[0]=pp[0]=0; for(int i=0;i
=0){ for(int j=10000;j>=c[i];j--){ dp[j]=max(dp[j],dp[j-c[i]]+a[i]); } } } for(int i=0;i
=c[i];j--){ pp[j]=max(pp[j],pp[j-c[i]]+a[i]); } } } int ans=-1; for(int i=0;i<=10000;i++){ if(dp[i]==0&&pp[i]==0)continue; else ans=max(ans,dp[i]+pp[i]); } printf("%d\n",ans); } return 0;}

 

转载于:https://www.cnblogs.com/lalalatianlalu/p/8450528.html

你可能感兴趣的文章
sql常见面试题
查看>>
jQuery总结第一天
查看>>
Java -- Swing 组件使用
查看>>
Software--Architecture--DesignPattern IoC, Factory Method, Source Locator
查看>>
poj1936---subsequence(判断子串)
查看>>
黑马程序员_Java基础枚举类型
查看>>
【redis4 】
查看>>
[ python ] 练习作业 - 2
查看>>
一位90后程序员的自述:如何从年薪3w到30w!
查看>>
HDU-1242-Rescue
查看>>
在.net core上使用Entity FramWork(Db first)
查看>>
Eclipse中如何开启断言(Assert),方法有二
查看>>
System.Net.WebException: 无法显示错误消息,原因是无法找到包含此错误消息的可选资源程序集...
查看>>
压缩图片 待验证
查看>>
UIImage 和 iOS 图片压缩UIImage / UIImageVIew
查看>>
MongoDB的数据库、集合的基本操作
查看>>
ajax向后台传递数组
查看>>
疯狂JAVA16课之对象与内存控制
查看>>
[转载]树、森林和二叉树的转换
查看>>
WPF移动Window窗体(鼠标点击左键移动窗体自定义行为)
查看>>