RQNOJ--160 竞赛真理(01背包)
2024-08-30 02:06:24
题目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;
}
最新文章
- LeetCode 136. Single Number
- ormlite的使用方法
- Allegro 快捷键设置
- MAC地址,使用java获取IP地址和MAC地址。
- eclipse添加velocity项目
- wifi display代码 分析
- 通过 Code First 开发建立新数据库
- 记VS2013并行编译导致出错的解决过程
- [转载] codeblocks快捷键
- PHP的MySQL扩展:PHP访问MySQL的常用扩展函数
- Android Widget 小部件(四---完结) 使用ListView、GridView、StackView、ViewFlipper展示Widget
- 获取Excel数据(或部分数据)并导出成txt文本格式
- 一个Web 持续集成工作实践
- PHP error_reporting() 错误控制函数功能详解
- #loj3090 [BJOI2019] 勘破神机
- 【JMeter】1.9上考试jmeter测试调试
- 二,windows下安装memcached服务
- usb_submit_urb
- Schema validation found non-datatype errors
- 如何上传word