博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【NOIP2006】开心的金明
阅读量:4654 次
发布时间:2019-06-09

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

绝对的水题,只是用来复习。

本题在洛谷上的链接:


 这不就是最简单的01背包吗?虽然每件物品的重要度变成了输入的重要度*物品价格。

01背包没什么好说的,多写两遍就会了,最朴素的01背包时间复杂度是O(n*m)的,空间复杂度也是O(n*m)的。原因在于此时的状态转移方程为dp[i][j]=max(dp[i-1][j],dp[i-1][j-p[i]]+v[i]),每次我们处理完一件物品时,数组中存放的就是上一件物品的dp值,如果可以加以利用,就可以省去一维。我们可以逆序枚举j,这样dp[j]=max(dp[j],dp[j-p[i]]+v[i]),每当我们处理到dp[j]时,此时的dp[j]中存放的其实就是dp[i][j]。时间复杂度就很难优化了。

1 #include 
2 3 const int maxn = 3e4 + 5, maxm = 30; 4 5 int v[maxm], p[maxm], dp[maxn]; 6 7 int main() { 8 int n, m; 9 scanf("%d%d", &n, &m);10 for (int i = 1; i <= m; ++i) {11 scanf("%d%d", &v[i], &p[i]);12 for (int j = n; j >= v[i]; --j)13 if (dp[j] < dp[j - v[i]] + v[i] * p[i])14 dp[j] = dp[j - v[i]] + v[i] * p[i];15 }16 printf("%d", dp[n]);17 return 0;18 }
AC代码

 

转载于:https://www.cnblogs.com/Mr94Kevin/p/9588215.html

你可能感兴趣的文章
transition 属性(逐渐变色)
查看>>
关于CURL的初步认识
查看>>
如何使用 JDBC 调用存储在数据库中的函数或存储过程
查看>>
Js通过原型继承创建子类
查看>>
HTML5 网页 漂浮窗广告 JavaScript逻辑 - demo
查看>>
使用一条SQL语句删除表中重复记录
查看>>
教程-Win7极速优化20项
查看>>
CF1083B The Fair Nut and String
查看>>
mac上卸载jdk 步骤
查看>>
Old Sorting(转化成单调序列的最小次数,置换群思想)
查看>>
C的|、||、&、&&、异或、~、!运算(转)
查看>>
迷宫城堡(强联通targin)
查看>>
easyUI添加修改tab页(toolbar)
查看>>
JavaScript笔试题
查看>>
Leetcode 969. Pancake Sorting
查看>>
set()集合的概念与一般操作
查看>>
winform - ComboBox_ListView2
查看>>
react中递归生成列表
查看>>
内置函数filter
查看>>
FIREDAC TFDCONNECTION连接ORACLE
查看>>