博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NYOJ747
阅读量:7177 次
发布时间:2019-06-29

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

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=747

来看思路:这题很明显需要用到背包 而且是个01背包。但是需要进行各预处理。

我们先要进行一下贪心这个贪心怎么来得呢 先看一个式子:a1-b1c1+a2-(c1+c2)b2 > a2-b2c2+a1-(c1+c2)b1

化简之后是:b2c1<b1c2所以用这个式子进行贪心就可以了

然后需要注意的是背包地方有两个细节:背包不一定装满然后还有一个再代码里面 我再解释

下面看代码:

#include
#include
#include
#include
#include
using namespace std;struct node{ int a,b,c;}p[100005];int dp[100010];bool cmp(node x,node y){ return x.b*y.c > x.c*y.b;}int main(){ int T,t,n,i,j,ans = 0; while(~scanf("%d%d",&T,&n)) { for(i = 0;i < n;i++) { scanf("%d %d %d",&p[i].a,&p[i].b,&p[i].c); } sort(p,p + n,cmp); memset(dp,0,sizeof(dp)); for(i = 0;i < n;i++) { for(j = min(T,p[i].a/p[i].b);j >= p[i].c;j--) //这个地方的j一定要用两者直接最小的 { dp[j] = max(dp[j],dp[j-p[i].c]+p[i].a-j*p[i].b); if(dp[j] > ans){ans = dp[j];} //这个地方是为了防止背包不装满的时候用得 } } printf("%d\n",ans); } return 0;}

 

转载于:https://www.cnblogs.com/zhanyage110/p/4287307.html

你可能感兴趣的文章
有序矩阵中第k小的元素
查看>>
IKAnalyzer 3.2.8 报错问题解决办法
查看>>
我的友情链接
查看>>
思达报表工具Style Report基础教程—在数据块中设置Where、Having条件
查看>>
计算机领域最新技术报告:云数据库
查看>>
ora-01658 unable to create initial extent for segment in tablespace
查看>>
Centos利用 rsync+inotify实现实时同步
查看>>
Difference Between VMFS 3 and VMFS 5
查看>>
time命令小结
查看>>
kali 1.0.9a 启动Metasploit
查看>>
python 数字
查看>>
Android入门及环境搭建
查看>>
页面<input type="radio"...>取值
查看>>
我的友情链接
查看>>
flume source channel sink
查看>>
Axis2+spring的webservice小例子
查看>>
Android UI系列-----ScrollView和HorizontalScrollView
查看>>
Mac OS X 背后的故事
查看>>
AgileEAS.NET敏捷开发平台及案例下载(持续更新)-索引
查看>>
修改hosts文件无效?附解决办法
查看>>