题目http://www.rqnoj.cn/problem/160

分析:这是一个01背包问题,对于每一道题目,都有两个选择"做"或者"不做"。
但是唯一不同的是如果做,那么又有两种选择。因此多加了判断条件。

二维的动态转移方程是:
  dp[i,j]=max{  dp[i-1,j],  dp[i-1,j-c1[i]]+w1[i], dp[i-1,j-c2[i]]+w2[i] }
将二维降维到一维:
      dp[j]=max{  dp[j],   dp[j-c1[i]]+w1[i], dp[j-c2[i]]+w2[i] }

​#include<stdio.h>
#include<string.h>

const int INF=0XFFFFFF;
int dp[1080010],T;

int getMax(int a,int b)
{
  return a>b?a:b;
}

void ZeroOnePack(int c1,int t1,int c2,int t2)
{
  for (int i=T;i>=0;i--)
  {
    if(i>=t1) dp[i]=getMax(dp[i],dp[i-t1]+c1);
    if(i>=t2) dp[i]=getMax(dp[i],dp[i-t2]+c2);
  }
}

int main()
{
  int N,w1[32],t1[32],w2[32],t2[32];
  while (scanf("%d%d",&N,&T)!=EOF)
  {
    for(int i=1;i<=N;i++)
      scanf("%d%d%d%d",&w1[i],&t1[i],&w2[i],&t2[i]);

    memset(dp,0,sizeof(dp));

    for(int i=1;i<=N;i++)
      ZeroOnePack(w1[i],t1[i],w2[i],t2[i]);

    printf("%d\n",dp[T]);
  }
  return 0;
}




最新文章

  1. LeetCode 136. Single Number
  2. ormlite的使用方法
  3. Allegro 快捷键设置
  4. MAC地址,使用java获取IP地址和MAC地址。
  5. eclipse添加velocity项目
  6. wifi display代码 分析
  7. 通过 Code First 开发建立新数据库
  8. 记VS2013并行编译导致出错的解决过程
  9. [转载] codeblocks快捷键
  10. PHP的MySQL扩展:PHP访问MySQL的常用扩展函数
  11. Android Widget 小部件(四---完结) 使用ListView、GridView、StackView、ViewFlipper展示Widget
  12. 获取Excel数据(或部分数据)并导出成txt文本格式
  13. 一个Web 持续集成工作实践
  14. PHP error_reporting() 错误控制函数功能详解
  15. #loj3090 [BJOI2019] 勘破神机
  16. 【JMeter】1.9上考试jmeter测试调试
  17. 二,windows下安装memcached服务
  18. usb_submit_urb
  19. Schema validation found non-datatype errors
  20. 如何上传word

热门文章

  1. shell 命令 用户管理
  2. docker ps -a
  3. boost 条件变量
  4. splice用法
  5. C++ BASS 实例
  6. NOI2014
  7. go包flag系统包简单使用
  8. VS2010-MFC(常用控件:滚动条控件Scroll Bar)
  9. iOS开发UITableView随笔
  10. sessionStorage 和 localStorage的区别