题目连接:uva 12260 - Free Goodies
题目大意:有n个糖果,每个糖果有p,j两个值,现在有两个人Petra和Jan,Prtra的取糖果方式是优先去p值大的j值小的;Jan取糖果的方式是尽量让自己开心值(取出糖果的j值和)大的情况下让Petra的开心值(取出糖果的p值和)也大,给出先选糖果的人,问说最后两人的开心值分别为多少。
解题思路:可以将糖果按照p值大小,再按j值小大的方式排序,排完的序列就是Petra的选取顺序,然后对于每个糖果,考虑Jan是否会选,dp[i][j]表示说前i个糖果中,Jan选取j个后的最大开心值,注意j ≤ (i+1)/2,因为如果轮到Petra选的话是不会将糖果让给Jan的。然后在Jan选取的过程中,要尽量保证说选走的p值要小,所以维护一个val[i][j]。
特别注意:Petra只关心眼前的利益,他只会取当前糖果中p值最大的,而Jan不一样,他不一定取最j值最大的,因为他知道j值大的不一定会被Petra先取走,所以他可以优先抢其他的。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 1005;
struct state {
int p, j;
}s[N];
int n, k, sum, dp[N][N], val[N][N];
bool cmp(const state& a, const state& b) {
if (a.p != b.p) return a.p > b.p;
return a.j < b.j;
}
void init () {
char str[N];
sum = 0;
memset(dp, 0, sizeof(dp));
memset(val, 0, sizeof(val));
scanf("%d%s", &n, str);
for (int i = 1; i <= n; i++) {
scanf("%d%d", &s[i].p, &s[i].j);
sum += s[i].p;
}
if (str[0] == 'P') k = 1;
else k = 0;
sort(s + 1, s + n + 1, cmp);
}
void solve () {
for (int i = 1; i <= n-k; i++) {
for (int j = 1; j <= (i+1)/2; j++) {
if (dp[i-1][j] > dp[i-1][j-1] + s[i+k].j) {
dp[i][j] = dp[i-1][j];
val[i][j] = val[i-1][j];
} else if (dp[i-1][j] == dp[i-1][j-1] + s[i+k].j) {
dp[i][j] = dp[i-1][j];
val[i][j] = min(val[i-1][j], val[i-1][j-1]+s[i+k].p);
} else {
dp[i][j] = dp[i-1][j-1] + s[i+k].j;
val[i][j] = val[i-1][j-1] + s[i+k].p;
}
}
}
printf("%d %d\n", sum - val[n-k][(n-k+1)/2], dp[n-k][(n-k+1)/2]);
}
int main () {
int cas;
scanf("%d", &cas);
while (cas--) {
init();
solve();
}
return 0;
}
分享到:
相关推荐
Laravel开发-laravel-goodies 帮助器类和扩展,使Laravel中的REST框架更容易使用。
好东西 用/为编写的最好的,最糟糕的选择 目前包括: 正在测试的快速WOT ++测试文件/ std /下的wot ++非标准库 wppbot /下的WOT ++ Discord机器人 wotpp-mode /下的Emacs的wot ++主模式
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route (a)客户端首次发起访问请求,nginx接收后,发现...
Laravel开发-laravel-goodies .zip
目前的项目网站架构中使用了F5和nginx,F5用来做负载均衡,nginx只用作反向代理服务器。最近应客户的要求准备去掉F5,使用软负载。大家都知道nginx抗并发能力强,又可以做负载均衡,而且使用nginx对我们目前的网站...
gcp-goodies 博客文章系列的源代码和其他材料-GCP Goodies
球拍开发用品使Racket开发人员的生活更轻松的脚本。 plt-alias用于设置PLT环境变量的bash函数plt-bin重定向到适当二... 设置步骤示例: $ git clone [repo-url] racket-dev-goodies && cd racket-dev-goodies 将plt b
前端 npm-goodies 使用 JS 中的 npm 进行创造性编码、快速原型设计和前端开发的课程/示例。 它展示了现代实践的优势,如模块化、promise、函数式编程、browserify、Node、ES6 等。 这仍然是一项正在进行的工作。 ...
sticky-headers-recyclerview.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
iOS-Goodies:您最喜欢的iOS新闻,现已开源
回合-android-goodies 来自 Rounds Android 团队的可重用代码
Ouzo Goodies 它是什么 从提取的实用程序类,测试断言和。 我们与PHP 7.2及更高版本兼容。 如何使用它 几个例子。 : $ result = FluentArray :: from ( $ users ) -> map ( Functions :: extractField ( 'name' ...
物品清单网页刮板适用于PHP的屏幕抓取和网络抓取库。 支持HTML / XML 浏览器工具Chrome在Bitbucket上的语法高亮显示使用JavaScript的浏览器推送通知后端API蓝图测试仪-从您的api蓝图文档中模拟为服务器高效使用...
Cpp_Goodies 链接到各种cpp模式或教程 教程/链接集 -精选的很棒的C ++(或C)框架,库,资源和闪亮的清单。 受到令人敬畏的...东西的启发。 -C ++数据结构和算法单 -旨在:具有C ++中级知识和受支持的语言范例的...
Android Native Goodies Unity和安卓交互的组件包 从Unity商店花了230多块买的 和安卓交互需要用到的东西都有 , 调用安卓系统所有组件及功能的都有 Unity商店内这个组件的地址: ...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
tk-goodies提供了一组Tcl / Tk软件包,以简便而强大的方式构建GUI。
android-goodies 用于 Android 开发的助手和实用程序
https://github.com/amiller/libfreenect-goodies.git cd pykinect 通过运行以下命令测试python可以找到libfreenect: python demo_freenect.py 使用说明 请使用以下命令运行此脚本: ipython -pylab -wthread demo_...
elfeed-goodies:Elfeed的各种好吃的东西