当前位置: 首页 > wzjs >正文

中企动力制作的网站百度权重10的网站

中企动力制作的网站,百度权重10的网站,旅游网站开发代码,设计网站广告语学习要点 深入理解回溯深入理解01背包问题 题目链接 购物单_牛客题霸_牛客网 题目描述 解法1&#xff1a;回溯 其实此题非常符合取子集的逻辑&#xff0c;但是时间复杂度太高。通过11/14。想写出来这个回溯过程&#xff0c;不容易。 #include <iostream> #include &l…

学习要点

  1. 深入理解回溯
  2. 深入理解01背包问题

题目链接

        购物单_牛客题霸_牛客网

题目描述

解法1:回溯

        其实此题非常符合取子集的逻辑,但是时间复杂度太高。通过11/14。想写出来这个回溯过程,不容易。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int money; // 有多少钱
int max_value = 0; // 礼物最终的最大价值
bool check[66];void dfs(vector<vector<int>>& v_big, int pos, int path_value, int path_cost) {for (int i = pos; i <= v_big.size() - 1; i++) {// 主件不附带他人,但是有可能已经被别的附带// 没有被添加过的主件if (v_big[i][3] == 0 && check[i] == false) {// 还可以买这个主件if ((path_cost + v_big[i][1]) <= money) {check[i] = true;max_value = max(max_value, path_value + v_big[i][1] * v_big[i][2]);if ( i == v_big.size()) {check[i] = false;break;}dfs(v_big, i + 1, path_value + v_big[i][1] * v_big[i][2],path_cost + v_big[i][1]);check[i] = false;}// 钱不够了,不能买这个主件else {max_value = max(max_value, path_value);// if (i != v_big.size() - 1) {//     continue;// }}}// 已经被添加过的主件else if (v_big[i][3] == 0 && check[i] == true) {// if (i != v_big.size() - 1) {//     continue;// }}// 附件附带的主件有可能被添加过,有可能没有被添加过// 已经添加主件的附件else if (v_big[i][3] != 0 && check[v_big[i][3]] == true) {// 还可以买这个附件if ((path_cost + v_big[i][1]) <= money) {check[i] = true;max_value = max(max_value, path_value + v_big[i][1] * v_big[i][2]);if ( i == v_big.size()) {check[i] = false;break;}dfs(v_big, i + 1, path_value + v_big[i][1] * v_big[i][2],path_cost + v_big[i][1]);check[i] = false;}// 钱不够了,不能买这个附件else {max_value = max(max_value, path_value);// if (i != v_big.size() - 1) {//     continue;// }}}// 没有添加主件的附件else if (v_big[i][3] != 0 && check[v_big[i][3]] == false) {// 还可以买这个附件if ((path_cost + v_big[i][1] + v_big[v_big[i][3]][1] ) <= money) {check[i] = true;check[v_big[i][3]] = true;max_value = max(max_value, path_value + v_big[i][1] * v_big[i][2]);if ( i == v_big.size()) {check[i] = false;break;}dfs(v_big, i + 1, path_value + v_big[i][1] * v_big[i][2] +v_big[v_big[i][3]][1] * v_big[v_big[i][3]][2],path_cost + v_big[i][1] + v_big[v_big[i][3]][1]);check[i] = false;check[v_big[i][3]] = false;}// 钱不够了,不能买这个附件{max_value = max(max_value, path_value);// if (i != v_big.size() - 1) {//     continue;// }}}else {}}
}int main() {int count;cin >> money >> count;// cout << money << " " << count << endl;vector<vector<int>> v_big(count + 1, vector<int>(4));int i = 1;while (i <= count) {cin >> v_big[i][1] >> v_big[i][2] >> v_big[i][3];i++;}// for(int j = 1; j<= count; j++)// {//     cout << v_big[j][1] << " "<< v_big[j][2] << " " << v_big[j][3] << endl;// }dfs(v_big, 1, 0, 0);cout << max_value << endl;return 0;
}

解法2:01背包

#include <bits/stdc++.h>
using namespace std;int main() {int count;int money;cin >> money >> count;// cout << money << " " << count << endl;vector<vector<int>> v_big(count + 1, vector<int>(4));int i = 1;while (i <= count) {cin >> v_big[i][1] >> v_big[i][2] >> v_big[i][3];i++;}// 简单改造一下这个数组for(int i = 1; i<=count;i++){v_big[i][1] = v_big[i][1] / 10;v_big[i][2] = v_big[i][2] * 10;if(v_big[i][3] != 0 ){int index = v_big[i][3];v_big[index].push_back(v_big[i][1]); v_big[index].push_back(v_big[i][2]);v_big[i][1] = 0; v_big[i][2] = 0; v_big[i][3] = 0;}}// 动归逻辑int num = money / 10;vector<vector<int>> dp(count + 1,vector<int>(num+1,0));// 首元素情况:无附件主件、单附件主件、双附件主件// 恰巧我们v_big[0]是全0,我们索性将其虚拟成0号物品这样方便我们进行初始化// 则全部初始化为0即可for(int i = 1; i<=count;i++){for(int j = 1; j<=num; j++){if(v_big[i][1] > j){dp[i][j] = dp[i-1][j];}else{// 不取该主件   int a = dp[i-1][j];// 只取该主件int b = dp[i-1][j - v_big[i][1]] + v_big[i][1] * v_big[i][2];// 取主件取单附件int c1 = 0;int c2 = 0;int c = 0;if(v_big[i].size() > 4){if((v_big[i][1] + v_big[i][4]) <= j){c1 = dp[i-1][j-v_big[i][1] - v_big[i][4]] + v_big[i][1] * v_big[i][2] + v_big[i][4] * v_big[i][5];}if((v_big[i][1] + v_big[i][6]) <= j){c2 = dp[i-1][j-v_big[i][1] - v_big[i][6]] + v_big[i][1] * v_big[i][2] + v_big[i][6] * v_big[i][7];}c = max(c1,c2);}// 取主件取双附件int d = 0;if(v_big[i].size() > 6){if((v_big[i][1] + v_big[i][4] + v_big[i][6]) <= j){d = dp[i-1][j-v_big[i][1] - v_big[i][4]- v_big[i][6]] + v_big[i][1] * v_big[i][2] + v_big[i][4] * v_big[i][5] + v_big[i][6] * v_big[i][7];}}int max1 = max(a,b); int max2 = max(c,d); int max3 = max(max1,max2);dp[i][j] = max3;}}}cout << dp[count][num]  << endl;return 0;}

http://www.dtcms.com/wzjs/311912.html

相关文章:

  • win2008搭建php网站百度导航下载2020新版语音
  • 自己本地可以做网站服务器吗长春模板建站代理
  • 可视化网站制作火狐搜索引擎
  • 在哪查询网站做的哪些外链开封搜索引擎优化
  • 高校网站安全建设方案做外贸有哪些网站平台
  • 一级域名的网站怎么做电子商务营销策划方案
  • 织梦免费自适应网站模板最近几天新闻大事
  • 发展和建设委员会官方网站历下区百度seo
  • 松江新城网站建设如何找做网站的公司
  • 蓝海网站建设360指数官网
  • 专门做食品的网站友情链接举例
  • 公司网站建设属于什么费用宁波seo外包优化
  • 如何让客户做网站百度推广app怎么收费
  • 如何做公司培训网站免费线上培训平台
  • 中山市做网站实力网络营销团队
  • 杭州好的做网站公司外贸平台app
  • wordpress 缩略图判断百度app优化
  • 怎么做简单的钓鱼网站低价刷粉网站推广
  • 360关键词竞价网站网址大全浏览器主页
  • 绵阳专门做网站的公司有哪些网站建设开发公司
  • 乐陵市住房和城乡建设局网站网页设计自学要多久
  • 网站进入百度沙盒企业网站的推广形式有
  • 网站建设和推广如何自己建网站
  • 公司网站建设的相关建议网址注册
  • 创业网站开发要多少钱网盘资源搜索神器
  • 运城网站建设公司有多少年度关键词
  • 刚开始做网站布局很吃力 怎么办seo咨询顾问
  • 网站建站 公司seo还可以做哪些推广
  • 信管女生做网站开发网站运维
  • 自己做网站教学视频教程windows7优化大师