codeforces-214(Div. 2)-C. Dima and Salad

题意:有不同的沙拉,对应不同的颜值和卡路里,现在要求取出总颜值尽可能高的沙拉,同时要满足

                       

解法:首先要把除法变成乘法,就是每次把读进来的b[ i ] 乘以 K;

   因为对于a [ i ] - b[ i ] * k有两种不同的可能(大于0和小于0),可以放在一个以25000为中心的,大小为50000的dp数组里;

   

  比如对于样例1:

  input

  3 2
  10 8 1
  2 7 1
  output
  18
这里我们缩小一下数据

我一开始不理解,为什么dp[j - b[i]]为什么只能在非-1的情况下更新dp[j];后来画了图就明白了;
下面ac代码:
//learnt and created at 2018/2/7
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n,k;
int a[],b[];
int dp[],mid = ;
int main(){
scanf("%d%d",&n,&k);
for(int i=; i<=n; i++)
{
scanf("%d",&a[i]);
}
for(int i=; i<=n; i++)
{
scanf("%d",&b[i]);
b[i] = a[i] - b[i]*k;
}
memset(dp,-,sizeof(dp));        //把dp数组初始化为-1;只把dp[25000]=0;
dp[mid]=;
for(int i=; i<=n; i++)
{
if(b[i]>=)
{
for(int j=; j>=b[i]; j--)
{
if(dp[j-b[i]] !=-)
dp[j] = max(dp[j-b[i]]+a[i],dp[j]);
}
}
else
{
for(int j=; j<=+b[i]; j++)
{
if(dp[j-b[i]]!=-)
dp[j] =max(dp[j-b[i]]+a[i],dp[j]);
}
}
}
if(dp[mid]==)puts("-1");
else printf("%d\n",dp[mid]); return ;
}
  
  

最新文章

  1. hadoop生态圈介绍
  2. [linux] Nginx编译安装错误error: the HTTP rewrite module requires the PCRE library
  3. 极客DIY:使用树莓派制作一套“NAS+私有云盘+下载机”
  4. org-mode
  5. netdata linux环境下的安装
  6. 【codevs】2776寻找代表元
  7. UIPinchGestureRecognizer 的scale使用
  8. html5权威指南:设置文本样式
  9. [Codeforces]860E Arkady and a Nobody-men
  10. eclipse遇到的问题
  11. Java并发编程(一)-- 多线程的基本概念
  12. PHP continue break 区别 用法
  13. python2与python3的区别(持续更新)
  14. Axure 验证码、进度条、分页条(翻页)、搜索框、选项卡
  15. React Native超棒的LayoutAnimation(布局动画)
  16. javascript中json对象长度
  17. sql盲注之报错注入(附自动化脚本)
  18. easyui panel异步获取后台数据在前台显示
  19. io流之节点流inputstream、outputstream、reader、writer
  20. visible, disable, css绑定

热门文章

  1. 10分钟了解分布式CAP、BASE理论
  2. 优雅的对象转换解决方案-MapStruct及其入门(一)
  3. 一个项目的SpringCloud微服务改造过程
  4. ContentProvider 使用详解
  5. C# Quartz结合控制台实现定时任务
  6. caddy &amp; grpc(3) 为 caddy 添加一个 反向代理插件
  7. java多线程基础(一)--sleep和wait的区别
  8. Android——倒计时跳转+sharedpreferences
  9. 996工作制?不如花点时间学知识!北栀暗影教你如何用WordPress搭建专业网站
  10. AutoCAD C#二次开发