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

长沙推广网站营销型网站建设模板

长沙推广网站,营销型网站建设模板,做网站要营业执照吗,学做西餐的网站学习要点 深入理解回溯深入理解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/345026.html

相关文章:

  • wordpress主题的文件在哪个文件夹seo如何快速出排名
  • 雅安工程交易建设网站阿里指数查询官网
  • 杨家平网站建设百度软文推广怎样收费
  • 山东网站建设和游戏开发的公司排名icp备案查询官网
  • 网站建设和营销福州seo技巧培训
  • 公众号采集wordpress上海优化网站seo公司
  • 深圳自己做网站 服务器无锡网站制作无锡做网站
  • 云南专业网站制作公司百度投放广告联系谁
  • 查公司的软件叫什么东莞优化疫情防控措施
  • python网页版编程成都seo公司排名
  • 好用的微信公众号编辑器seo推广具体做什么
  • 常州网站建设要多少钱排名seo怎么样
  • 会HTML怎么做网站关键词挖掘爱网站
  • 做影视网站赚钱吗班级优化大师app下载学生版
  • 用c语言可以做网站吗北京优化网站方法
  • 六盘水网站建设徐州关键词优化平台
  • 个性化定制网站a5站长网网站交易
  • 网站全屏广告南京百度
  • 重庆装修论坛北京网站优化外包
  • 国外有个专门做麋鹿测试的网站关键词排名查询软件
  • 如何建立微信群seo如何快速排名百度首页
  • 一起做网店网官网青岛百度快速排名优化
  • 网站怎么收录网站seo综合诊断
  • 网站系统管理员模块网店推广策划书
  • 南宁新技术产业建设开发总公司网站软件开发培训机构排名
  • ubc网站谁做的网络营销案例分析题
  • 图片网站怎么做优化seo分析师
  • 徐州开发区中学网站世界十大搜索引擎及地址
  • 做企业宣传片的网站seoul是哪个国家
  • 怎么做网站扫码支付seo网络优化