描述:度度熊拥有一个自己的Baidu空间,度度熊时不时会给空间朋友赠送礼物,以增加度度熊与朋友之间的友谊值。度度熊在偶然的机会下得到了两种超级礼物,于是决定给每位朋友赠送一件超级礼物。不同类型的朋友在收到不同的礼物所能达到的开心值是不一样的。开心值衡量标准是这样的:每种超级礼物都拥有两个属性(A, B),每个朋友也有两种属性(X, Y),如果该朋友收到这个超级礼物,则这个朋友得到的开心值为A*X + B*Y。
由于拥有超级礼物的个数限制,度度熊很好奇如何分配这些超级礼物,才能使好友的开心值总和最大呢?

输入

第一行n表示度度熊的好友个数。

接下来n行每行两个整数表示度度熊好朋友的两种属性值Xi, Yi。

接下来2行,每行三个整数ki, Ai, Bi,表示度度熊拥有第i种超级礼物的个数以及两个属性值。

1<=n<=1000, 0<=Xi,Yi, Ai, Bi 1+k2>=n

输出

输出一行一个值表示好友开心值总和的最大值

样例输入

4

3 6

7 4

1 5

2 4

3 3 4

3 4 3

样例输出

118

提示

送给第一种礼物的人有1,3,4,送给第二种礼物的人有2

代码1:

#include<iostream>
#include<algorithm>
using namespace std;
int f[1001];
struct node
{int x , y;
}human[1001];
int num1,num2,a1,b1,a2,b2;int main(void)
{int n , i , j , ans;scanf("%d",&n);for(i = 1 ; i <= n ; ++i)scanf("%d %d" , &human[i].x , &human[i].y);scanf("%d %d %d" , &num1 , &a1 , &b1);scanf("%d %d %d" , &num2 , &a2 , &b2);memset(f,-1,sizeof(f));//printf("%d\n",f[1]);ans = -1000000;f[0] = 0;for(i = 1 ; i <= min(n,num2) ; ++i)f[i] = f[i-1] + human[i].x*a2 + human[i].y*b2;if(f[n] > ans)ans = f[n];//f[0]=human[1].a*a1+human[1].b*b1;//printf("ans:%d\n",ans);for(i = 1 ; i <= min(num1,n) ; ++i){f[0] = f[0] + human[i].x*a1 + human[i].y*b1;//printf("i:%d j:0 f:%d\n",i,f[0]);for(j = 1 ; j <= min(n-i,num2) ; ++j){f[j] = max(f[j-1]+human[i+j].x*a2+human[i+j].y*b2 , f[j]+human[i+j].x*a1+human[i+j].y*b1);//printf("i:%d j:%d f:%d\n",i,j,f[j]);}if(f[n-i] > ans)ans = f[n-i];}printf("%d\n",ans);return 0;
}

代码2:

#include<iostream>
using namespace std;int c[1000][2000];int maxx(int a,int b)
{if(a > b)return a;elsereturn b;
}int main(void)
{int i , j , t , n , k1 , k2 , a1 , a2 , b1 , b2 , max;int x[1001] , y[1001];cin >> n;for (i = 1 ; i <= n ; ++i)cin >> x[i] >> y[i];cin >> k1 >> a1 >> b1 >> k2 >> a2 >> b2;t = maxx(x[1]*a1+y[1]*b1,x[1]*a2+y[1]*b2);c[1][k1+k2] = x[1]*a1+y[1]*b1;c[1][0] = x[1]*a2+y[1]*b2;for(i = 1 ; i <= k1+k2-1 ; ++i)c[1][i] = t;for(j = 2 ; j <= n ; ++j){for(i = 0 ; i <= k1+k2-j+1 ; ++i)c[j][i] = maxx(c[j-1][i+1]+x[j]*a1+y[j]*b1,c[j-1][i]+x[j]*a2+y[j]*b2);}max = 0;for(i = 0 ; i <= k1+k2-n+1 ; ++i){if(c[n][i] > max)max = c[n][i];}cout << max << endl;return 0;
}

DP方法:

#include<iostream>
#include<cstdio>
using namespace std;const int MAXN = 1002;
int x[MAXN], y[MAXN], dp[MAXN][MAXN], a[3], b[3], k[3]; int main(void)
{int n , i , j , ans , c1 ,c2;while(scanf("%d", &n) != EOF){for (i = 1; i <= n; ++i){scanf("%d %d", &x[i], &y[i]);}for (i = 1; i <= 2; ++i){scanf("%d %d %d", &k[i], &a[i], &b[i]);}memset(dp , 0 , sizeof(dp));for (i = 1; i <= n; ++i){for (j = 0; j <= k[1] && j <= i; ++j){if (i - j > k[2])continue;c1 = a[1] * x[i] + b[1] * y[i] ;c2 = a[2] * x[i] + b[2] * y[i] ;if(j)dp[i][j] = dp[i - 1][j - 1] + c1;if(i - j)dp[i][j] = max(dp[i][j], dp[i - 1][j] + c2);}}ans = 0;for (i = 0; i <= k[1]; ++i)ans = max(ans, dp[n][i]);printf("%d\n", ans);}return 0;
}

【2012百度之星/初赛下】C:度度熊的礼物相关推荐

  1. 【2012百度之星/初赛下】A:度度熊就是要刷排名第一

    描述:一天度度熊在Baidu游戏大厅中发现了一个隐藏的神奇游戏,叫做"度度熊的逆袭".度度熊很好奇到底是什么情况,于是就进入了游戏.这个游戏很神奇,游戏会给出n个数Ai,度度熊可以 ...

  2. 2017百度之星初赛:A-1006. 度度熊的01世界(DFS)

    度度熊的01世界  Accepts: 967  Submissions: 3064  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 327 ...

  3. 2017百度之星初赛:B-1005. 度度熊的交易计划(最小费用流)

    度度熊的交易计划  Accepts: 460  Submissions: 2329  Time Limit: 12000/6000 MS (Java/Others)  Memory Limit: 32 ...

  4. 【2012百度之星/初赛下】B:网页聚类

    描述:有N(N2+ (y_j-y_i)2 + (z_j-z_i)2.请求出最大的t,使得N个网页可以聚成K类,其中每个类至少包含一个网页,且任意两个位于不同类中网页的相似度都至少为t. 输入 第一行包 ...

  5. 【2012百度之星/初赛上】A:度度熊就是要第一个出场

    描述:Baidu年会安排了一场时装秀节目.N名员工将依次身穿盛装上台表演.表演的顺序是通过一种"画线"抽签的方式决定的. 首先,员工们在一张白纸上画下N条平行的竖线.在竖线的上方从 ...

  6. 【2012百度之星/初赛上】D:轮子上的度度熊

    描述:百度楼下有一块很大很大的广场.广场上有很多轮滑爱好者,每天轮滑爱好者们都会在广场上做一种叫做平地花式轮滑的表演.度度熊也想像他们一样在轮上飞舞,所以也天天和他们练习. 因为度度熊的天赋,一下就学 ...

  7. 【2012百度之星/初赛上】B:小小度刷礼品

    描述:一年一度的百度之星又开始了,这次参赛人数创下了吉尼斯世界纪录,于是百度之星决定奖励一部分人:所有资格赛提交ID以x结尾的参赛选手将得到精美礼品一份. 小小度同学非常想得到这份礼品,于是他就连续狂 ...

  8. 2017百度之星资格赛:1001. 度度熊保护村庄(floyd最小环)

    度度熊保护村庄  Accepts: 26  Submissions: 677  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 32768/ ...

  9. 2017百度之星资格赛:1003. 度度熊与邪恶大魔王

    度度熊与邪恶大魔王  Accepts: 1288  Submissions: 7716  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 3 ...

最新文章

  1. 老广: KVM虚拟化学习笔记
  2. hive 小技巧总结
  3. 最大似然估计 (MLE) 最大后验概率(MAP)
  4. 【Python】Python中str()和repr()函数的区别
  5. python元组求和_Python 列表和元组 - 学习笔记(持续更新)
  6. android保存字符到sd卡,android 保存TXT文件到SD卡方法
  7. 200多个新颖独特的域名展示
  8. Rust 入坑指南:鳞次栉比 | CSDN 博文精选
  9. bzoj 4709: [Jsoi2011]柠檬(分段DP+决策单调性)
  10. jQuery(七)、效果和动画
  11. 《Windows via C/C++》学习笔记 —— 内核对象的“线程同步”之“事件内核对象”...
  12. C语言进制转换相关函数
  13. windows进程/线程创建过程 --- windows操作系统学习
  14. Saved Blogs
  15. 运放参数SR(压摆率)、增益带宽积(GBW)
  16. 养生篇01 (饭水分离法)
  17. 无需ROOT安卓备份Soul应用数据并提取聊天记录
  18. BasicDBObject 和Query 查询mongodb不同使用方式
  19. 苹果手机照片流使用方法(iphone我的照片流在哪)
  20. 【我的Android进阶之旅】SQLite出错时候的错误码整理

热门文章

  1. python开发框架 代码生成_500 行 Python 代码构建一个轻量级爬虫框架
  2. 2021云栖大会丨阿里云发布第四代神龙架构,提供业界首个大规模弹性RDMA加速能力
  3. 5天让你技能加满的“王炸组合”,速来!
  4. 60秒完成病毒基因对比 阿里云向社会免费开放基因计算服务
  5. 1年将30PB数据迁移到Spark,eBay的经验有何可借鉴之处?
  6. 移动游戏市场爆发背后的游戏引擎战局
  7. ORACLE TEXT FILTER PREFERENCE(一)
  8. 小程序直播间报错:{“errmsg“:“the current room status does not allow this operation rid:“,“errcode“:300023}
  9. C++的一些知识点摘抄(创建基本类 高级类)
  10. eclipse自动补全