昨天是我负责这个题目的,最后没搞出来,真的给队伍拖后腿了。

当时都推出来了 我假设最后结果是取了m个物品,则我把这个m个物品按取的先后编号为 k1 k2 k3 k4...km

则最终结果就是 (k1.a+k2.a+...km.a)-((m-1)*k1.b+(m-2)*k2.b+....+1*k(m-1).b+0*km.b);

由此可见最终的结果必定是从n个石头中选出m个石头,而且这m个石头要按b值的升序来取,因为按上述式子,这m个石头的a值顺序不影响结果,但b值越小的放前面就使得结果越优,这里也算用了一下贪心思想吧,不过是显而易见的。

然后当时聪哥就照着这个敲了一个贪心的,WA了。。。之后就肯定了绝对不仅仅用贪心来解

然后一直到比赛结束,我都没想到合适的方法来解。。。

其实已经给定了取的顺序,在n个物品中取m件使得价值最大。。。这不就是典型的背包问题嘛。。。哎,我真的是觉得自己当时脑袋短路的可以

于是我们定义一个d[i][j],表示当前第i件物品放到j位置的最大值(当然该件物品也可以不取,但这个状态必须保留下来)。

于是我们把b值按降序排序。从后往前来取石头比较好算一点。

d[i][j]=max(d[i-1][j],d[i-1][j-1]+ai-(j-1)*bi)

d[i-1][j]就代表当前这个物品我不取,后面那个就代表取,但是我就有点纠结这个(j-1)*bi这里,因为我背包过程中,d[i][j]虽然是规定了i件物品在在第j次取,但是之前也存在不取的情况,那此时这个石头还是第j次取吗?后来我发现自己想多了,首先按我的定义这个式子是肯定没错的,其次,如果结果最终是存在一个取石头的序列,那么必定就能通过这个式子来得到结果。。否则就是0了。就是把i件物品在各个位置的值都求一下,最后总结起来就存在那样的放置方法即可。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 1010
using namespace std;
int d[N][N];
struct node
{
int a,b;
bool operator <(const node &rhs) const
{
if (b==rhs.b)
return a>rhs.a;
return b>rhs.b;
}
} s[N];
int main()
{
int n;
while (scanf("%d",&n) && n)
{
for (int i=;i<=n;i++)
scanf("%d%d",&s[i].a,&s[i].b);
sort(s+,s++n);
memset(d,,sizeof d);
for (int i=;i<=n;i++)
{
for (int j=;j<=i;j++)
{
d[i][j]=max(d[i-][j],d[i-][j-]+s[i].a-(j-)*s[i].b);
}
}
int ans=;
for (int i=;i<=n;i++)
ans=max(ans,d[n][i]);
printf("%d\n",ans);
}
return ;
}

最新文章

  1. QT 默认环境路径配置方法
  2. JavaScript数组模拟栈和队列
  3. T-SQL中的随机数
  4. Codeforces 677E Vanya and Balloons(DP + 一些技巧)
  5. IE8下JQuery clone 出的select元素使用append添加option异常解决记录
  6. wordpress学习-plugins-001
  7. 聊聊并发(八)——Fork/Join框架介绍
  8. Android点击Button实现功能的几种方法
  9. 6.5 THUSC 考试题解
  10. Linux Kernel 整数溢出漏洞
  11. ThreadLocal 在web环境下使用的边界问题
  12. GWT开端
  13. ASP.NET MVC5+EF6+EasyUI 后台管理系统(88)-Excel导入和导出-主从表结构导出
  14. Windows自删除程序和DLL
  15. fabric.js PatternBrush
  16. dubbo框架整合常见问题
  17. C#中Invoke的用法1
  18. c++类成员变量初始化相关问题
  19. ajax请求二进制流图片并渲染到html中img标签
  20. Jquery的Ajax中contentType和dataType的区别

热门文章

  1. thread.start和threadstart.invoke的区别
  2. python 文件夹递归
  3. 吴裕雄--天生自然java开发常用类库学习笔记:foreach及Enumeration接口
  4. (八)微信小程序---获取定位信息chooseLocation
  5. Day 23:JAVA SE复习
  6. 【转帖】Windows 10版本占比一览:v1903依然最稳定 占比52.6%
  7. 小程序之scroll-view用法 - 水平滚动
  8. 干干净净的grep
  9. HTML的文档结构与语法(一)
  10. pyinstaller打包PySide2写的GUI程序,调用ffmpeg隐藏CMD控制台解决方案