测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A27106. 调味平衡

填空题 困难

题目描述

调味平衡

题目描述

小A准备了n种食材用来制作料理,这些食材依次以 1,2,...,n编号,第i种食材的酸度为 ai,甜度为 bi。对于每种食材,小A可以选择将其放入料理,或者不放入料理。料理的酸度A为放入食材的酸度之和,甜度 B为放入食材的甜度之和。如果料理的酸度与甜度相等,那么料理的调味是平衡的。

过于清淡的料理并不好吃,因此小 A想在满足料理调味平衡的前提下,合理选择食材,最大化料理的酸度与甜度之和。你能帮他求出在调味平衡的前提下,料理酸度与甜度之和的最大值吗?

输入格式

第一行,一个正整数 n ,表⽰⾷材种类数量。

接下来n行,每行两个正整数ai,bi ,表⽰⾷材的酸度与甜度。

输出格式

输出共一行,一个整数,表⽰在调味平衡的前提下,料理酸度与甜度之和的最⼤值。

样例

输入样例 1

3
1 2
2 4
3 2

输出样例 1

8

输入样例 2

5
1 1
2 3
6 1
8 2
5 7

输出样例 2

2

数据范围

对于 40% 的测试点,保证 1≤n≤ 10,1 ≤ ai,bi ≤ 10。

对于另外 20% 的测试点,保证 1≤n≤ 50,1 ≤ ai,bi ≤ 10。

对于所有测试点,保证1≤n≤100,1≤ai,bi <500。

参考答案

#include <cstdio> #include <algorithm> using namespace std; const int N= 105; const int C=505; const int D=N*C*2; int n; int f[D]; int main(){ scanf("%d",&n); for(int i=0;i<D; i++) f[i]= -1e9; f[N * C]= 0; while(n--){ int a, b; scanf("%d%d",&a, &b); int x=a+b,y=a-b; if(y<= 0){ for(int i=-y; i< D; i++) f[i +y]= max(f[i +y],f[i]+ x); }else { for(int i=D-y-1;i; i--) f[i +y]= max(f[i +y],f[i]+ x); } } printf("%d\n",f[N * C]); return 0; }
上一题 下一题