华为oj 购物单
这两天断断续续敲完这个(放假的时候比较懒),一次成功有点小激动(●'◡'●) 不过貌似从第一次打开开始计时。。。。。
这道题目很像01背包,我将附件与它们的主件绑定(就是link起来)然后套用动态规划
ok,解决
- #include<iostream>
- #include<vector>
- using namespace std;
- class node {//代表主件的类
- public:
- int value;
- int p;//重要度
- int n;//附件个数
- int q;//附件指向的主件编号
- node *link;
- node():value(0),p(0),n(0),q(0),link(nullptr){}
- };
- int judge(vector<node*>& vc,int N,int m);
- int max(int, int);
- int main()
- {
- int N, m;
- vector<node*> vc;
- cin >> N >> m;
- for (int i = 0;i < m;i++) {
- int vi, pi, qi;
- cin >> vi >> pi >> qi;
- node *np = new node();
- np->value = vi;
- np->p = pi;
- np->q = qi;
- vc.push_back(np);
- }
- for (vector<node*>::iterator i = vc.begin();i != vc.end();i++) {
- int tmp = (*i)->q;
- if (tmp > 0) {
- if(vc[tmp-1]->link==nullptr)
- vc[tmp - 1]->link = *i;
- else
- vc[tmp - 1]->link->link = *i;
- vc[tmp - 1]->n++;
- }
- }
- for (vector<node*>::iterator i = vc.begin();i != vc.end();) {
- int tmp = (*i)->q;
- if (tmp > 0) {
- i=vc.erase(i);
- }
- else {
- ++i;
- }
- }
- cout<<judge(vc, N, m)<<endl;
- return 0;
- }
- int judge(vector<node*>& vc, int N, int m) {
- //任务 返回经过计算的结果
- //建立一个int[3200][60]数组 因为N为10的倍数
- int tb[3200][60] = {0};
- vector<node*>::iterator ib = vc.begin();
- for (int i = 1;i <= N / 10;i++) {
- if ((*ib)->n == 0) {
- if ((*ib)->value <= i*10) {
- tb[i][1] = ((*ib)->value*(*ib)->p);
- }
- }
- if ((*ib)->n == 1) {
- if (((*ib)->value+(*ib)->link->value) <= i*10) {
- tb[i][1] = ((*ib)->value*(*ib)->p)+ ((*ib)->link->value*(*ib)->link->p);
- }
- else {
- tb[i][1] = ((*ib)->value*(*ib)->p);
- }
- }
- if ((*ib)->n == 2) {
- if (((*ib)->value + (*ib)->link->value+ (*ib)->link->link->value) <= i*10) {
- tb[i][1] = ((*ib)->value*(*ib)->p) + ((*ib)->link->value*(*ib)->link->p)+ ((*ib)->link->link->value*(*ib)->link->link->p);
- }
- else if (((*ib)->value + (*ib)->link->value) <= i*10) {
- tb[i][1] = ((*ib)->value*(*ib)->p) + ((*ib)->link->value*(*ib)->link->p);
- }
- else {
- tb[i][1] = ((*ib)->value*(*ib)->p);
- }
- }
- }
- ++ib;//使迭代器指向下一个元素
- int j=1;
- for (;ib != vc.end();ib++,j++) {
- for (int i = 1;i <= N / 10;i++) {
- if ((*ib)->n == 0) {//没有附件
- int tmp1 = (*ib)->value;
- int tmp1_ = (*ib)->p;
- if (tmp1 > i * 10) {
- tb[i][j] = tb[i][j - 1];
- }
- else {
- tb[i][j] = max(tb[i][j - 1], tb[i - tmp1 / 10][j - 1] + tmp1*tmp1_);
- }
- }
- if ((*ib)->n == 1) {//有一个附件
- int tmp1 = (*ib)->value;
- int tmp1_ = (*ib)->p;
- int tmp2 = (*ib)->link->value;
- int tmp2_ = (*ib)->link->p;
- if (tmp1 > i * 10) {
- tb[i][j] = tb[i][j - 1];
- }
- else if ((tmp1 + tmp2) > i * 10) {
- tb[i][j] = max(tb[i][j - 1], tb[i - tmp1 / 10][j - 1] + tmp1*tmp1_);
- }
- else {
- int m1= max(tb[i][j - 1], tb[i - tmp1 / 10][j - 1] + tmp1*tmp1_);
- tb[i][j] = max(m1, tb[i - (tmp1+tmp2) / 10][j - 1] + tmp1*tmp1_+tmp2*tmp2_);
- }
- }
- if ((*ib)->n == 1) {//有两个附件
- int tmp1 = (*ib)->value;
- int tmp1_ = (*ib)->p;
- int tmp2 = (*ib)->link->value;
- int tmp2_ = (*ib)->link->p;
- int tmp3= (*ib)->link->link->value;
- int tmp3_ = (*ib)->link->link->p;
- if (tmp1 > i * 10) {
- tb[i][j] = tb[i][j - 1];
- }
- else if ((tmp1 + tmp2) > i * 10) {
- tb[i][j] = max(tb[i][j - 1], tb[i - tmp1 / 10][j - 1] + tmp1*tmp1_);
- }
- else if((tmp1+tmp2+tmp3)>i*10){
- int m1 = max(tb[i][j - 1], tb[i - tmp1 / 10][j - 1] + tmp1*tmp1_);
- tb[i][j] = max(m1, tb[i - (tmp1 + tmp2) / 10][j - 1] + tmp1*tmp1_ + tmp2*tmp2_);
- }
- else {
- int m1 = max(tb[i][j - 1], tb[i - tmp1 / 10][j - 1] + tmp1*tmp1_);
- int m2= max(m1, tb[i - (tmp1 + tmp2) / 10][j - 1] + tmp1*tmp1_ + tmp2*tmp2_);
- tb[i][j] = max(m2, tb[i - (tmp1 + tmp2 + tmp3) / 10][j - 1] + tmp1*tmp1_ + tmp2*tmp2_ + tmp3*tmp3_);
- }
- }
- }
- }
- return tb[N/10][j-1];
- }
- int max(int a, int b) {
- if (a > b)
- return a;
- else
- return b;
- }
华为oj 购物单的更多相关文章
- 华为OJ:火车进站
火车进站 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号.要求以字典序排序输出火车出站的序列号. 输入描述: 有多组测试用例, ...
- 在华为oj的两个月
一次偶然的机会,我接触到华为oj平台(http://career-oj.huawei.com/exam/camLogin.jsp),当时的心情很是兴奋,于是立马注册开通,然后迫不及待地上去做题.刚开始 ...
- 蓝桥杯 购物单(使用word协助)
标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折 ...
- 2017第八届蓝桥杯C/C++ B组省赛-购物单
标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折 ...
- 购物单:Excel的应用
题目描述: 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠 ...
- 购物单 && 动态规划 && 背包问题
题目叙述的言语倒是蛮多的: 王强今天很开心,公司发给N元的年终奖.王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子: 主件 附件 电脑 ...
- 2017蓝桥杯购物单(C++B组)
原题: 标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞.这不,XX大促销又来了!老板夫人开出了长长的购物单,都是 ...
- Java实现第八届蓝桥杯购物单
购物单 题目描述 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打 ...
- Java蓝桥杯01——第一题集锦:堆煤球、购物单、哪天返回、第几天、分数
堆煤球(2016JavaB) 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100 ...
随机推荐
- CentOS7 NTP 安装配置
NTP 网络时间协议用来同步网络上不同主机的系统时间.你管理的所有主机都可以和一个指定的被称为 NTP 服务器的时间服务器同步它们的时间.而另一方面,一个 NTP 服务器会将它的时间和任意公共 NTP ...
- idea Error:java: Compilation failed: internal java compiler error
idea 遇到Error:java: Compilation failed: internal java compiler error 是提示说你当前使用的编译器jdk版本不对. 按住Ctrl+Alt ...
- 顺序查找SequentialSearch
#include <stdio.h>int SequentialSearch(int *a,int n,int x);int main(void){ //num代表查找的数 int num ...
- CNN初步-2
Pooling 为了解决convolved之后输出维度太大的问题 在convolved的特征基础上采用的不是相交的区域处理 http://www.wildml.com/2015/11/unde ...
- POCO库——Foundation组件之加解密Crypt
加解密Crypt:内部提供多种加解密方式.信息摘要提取.随机数产生等,具体的算法内部实现不做研究学习: DigestEngine.h :DigestEngine类作为各种摘要提取的基类,提供必要的接口 ...
- C++ 系列:多线程编程基础知识
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...
- Quart.NET实施参考
参考 1.博客园: http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html 2.官网:http://www.cnblogs.co ...
- notepad++快捷键
notepad++现在是我最常用的文本编辑工具,其中使用的列模式编辑,也是很好使用的. 基本的快捷键: Ctrl-C,Ctrl-X,Ctrl-V,Ctrl-Y,Ctrl-A,Ctrl-F,Ctrl-S ...
- Ubuntu菜鸟入门(五)—— 一些编程相关工具
一.sublime text3 sudo add-apt-repository ppa:webupd8team/sublime-text- sudo apt-get update sudo apt-g ...
- Swift -运算符和循环结构
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #4dbf56 } p.p2 { margin: 0.0px 0. ...