华为OJ---购物单
来源:互联网 发布:药品网络销售总总结 编辑:程序博客网 时间:2024/06/05 04:46
问题描述:
输入:
输入的第 1 行,为两个正整数,用一个空格隔开:N m(其中 N ( <32000 )表示总钱数, m ( <60 )为希望购买物品的个数。)从第 2 行到第 m+1 行,第 j 行给出了编号为 j-1 的物品的基本数据,每行有 3 个非负整数 v p q(其中 v 表示该物品的价格( v<10000 ), p 表示该物品的重要度( 1 ~ 5 ), q 表示该物品是主件还是附件。如果 q=0 ,表示该物品为主件,如果 q>0 ,表示该物品为附件, q 是所属主件的编号)
输出:
输出文件只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值( <200000 )。
样例输入:
1000 5
800 2 0
400 5 1
300 5 1
400 3 0
500 2 0
样例输出:2200
//01背包问题 #include<iostream>using namespace std;int max(int x,int y){return(x>y?x:y);} typedef struct{int value; //物品价格 int priority; //物品的重压程度 int q; //编号,0为主件,非0为附件 }product;product proVec[60];int main(){int N,m,i,j;cin>>N; //总钱数 cin>>m; //物品个数 for(i=1;i<=m;i++) cin>>proVec[i].value>>proVec[i].priority>>proVec[i].q;int *f=new int[N+1];for(i=0;i<=N;i++) f[i]=0;//完全背包问题for(i=1;i<=m;i++){for(j=N;j>=10;j--){if(j>=proVec[i].value){if(proVec[i].q==0){f[j]=max(f[j],f[j-proVec[i].value]+proVec[i].value*proVec[i].priority);}else{if(j>=proVec[i].value+proVec[proVec[i].q].value){f[j]=max(f[j],f[j-proVec[i].value-proVec[proVec[i].q].value]+proVec[i].value*proVec[i].priority+proVec[proVec[i].q].value*proVec[proVec[i].q].priority);}}}}} cout<<f[N];delete []f; //释放动态数组内存,养成良好的编程习惯 return 0;}
阅读全文
0 0
- 华为oj 购物单
- 华为oj 购物单
- 华为oj 购物单
- 华为OJ购物单
- 华为OJ---购物单
- 华为OJ(购物单)
- 【华为OJ】【068-购物单】
- 华为oj--中级--购物单
- 华为oj中级 购物单
- 华为OJ中级题-设计购物单
- 华为OJ——购物单
- 【ACM】华为oj--购物单(01背包变种)
- 华为oj-购物单(依赖背包问题)
- OJ--购物单
- 华为OJ 购物结算系统
- 华为机试:购物单
- 华为oj上的购物单问题,背包问题的变种,动态规划
- 华为上机试---购物单(算法:背包问题)
- Redis Cluster的FailOver失败案例分析
- Android 沉浸式状态栏 和 activity 进出动画
- 自定义异常捕获-CrashHandler
- 深度相机(三)--三种方案对比
- HDFS的java客户端编写
- 华为OJ---购物单
- 利用keepalived实现高可靠(HA)配置nginx 的
- 下半年值得关注的新机和科技趋势
- 投鼠忌器
- PAT (Advanced Level) Practise 1092 To Buy or Not to Buy (20)
- 下半年值得关注的新机和科技趋势
- myeclipse的package explorer中,项目的src目录下的相同的包名如何合并在一起
- 如何看待“我有个绝妙的idea就差一个程序员来实现了”?
- C++中指针和引用