MOOC清华《程序设计基础》第6章:橱窗插花问题(递推法)
来源:互联网 发布:萌萌猪软件系统开发 编辑:程序博客网 时间:2024/06/06 01:40
#include <iostream>using namespace std;int V = 5;int F = 3; int main(){void ToBinary(int num, int binary[]);int Count1(int binary[], int &high);//定义美感数组int beauty[V][F] = {{7,5,-21},{23,21,5},{-5,-4,-4},{-24,10,-20},{16,23,20}};//定义最大美感得分和、相应方案int best_beauty = 0, best_put = 0;//定义部分美感和数组,设定初值int partial_sum[1 << V] = {0}; //枚举0 ~ 2^V - 1 for(int i = 1; i < (1 << V); i++){//计算部分插花方案int binary[V] = {0};ToBinary(i, binary);int high;int flowers = Count1(binary, high);if(flowers > F) //不是合法的部分方案continue; //递推部分美感和partial_sum[i] = partial_sum[i - (1 << high)] + beauty[high][flowers - 1];//测试代码//cout << "high = " << high << endl;//cout << "partial_sum[" << i << "] = " << partial_sum[i] << endl; //维护最大美感得分和、相应方案if(flowers == F && partial_sum[i] > best_beauty) {best_beauty = partial_sum[i];best_put = i;}}//输出答案cout << "最大美感得分和:" << best_beauty << endl;cout << "插花方法:";int best_binary[V] = {0};ToBinary(best_put, best_binary);for(int vase = 0, flower = 1; vase < V; vase++)if(best_binary[vase] == 1){cout << flower;flower++;}elsecout << 0;return 0;}void ToBinary(int num, int binary[]){for(int i = 0; i < V; i++){binary[i] = num & 1;num = num >> 1;}}int Count1(int binary[], int &high) //注意:这里的取地址运算符 {int count = 0;high = -1;for(int i = 0; i < V; i++)if(binary[i] == 1){high = i;count++;}return count;}
测试代码附带运行时的结果:
阅读全文
0 0
- MOOC清华《程序设计基础》第6章:橱窗插花问题(递推法)
- MOOC清华《程序设计基础》第6章:橱窗插花问题(枚举法)
- MOOC清华《程序设计基础》第6章:橱窗插花问题(动态规划,输出方法一)
- MOOC清华《程序设计基础》第6章:橱窗插花问题(动态规划,输出方法二)
- MOOC清华《程序设计基础》第6章第1题:n级台阶问题(递推法)
- MOOC清华《程序设计基础》第4章:插花游戏-求素数
- MOOC清华《程序设计基础》第6章第3题:最大乘积问题(递归法)
- MOOC清华《程序设计基础》第6章第3题:最大乘积问题(动态规划)
- MOOC清华《程序设计基础》第6章:分鱼问题(不用数组递推)
- MOOC清华《程序设计基础》第6章:最长公共子序列问题(动态规划)
- MOOC清华《程序设计基础》第5章:青蛙过河问题
- MOOC清华《程序设计基础》第6章第1题:n级台阶问题(递归法)
- MOOC清华《程序设计基础》第6章第2题:求f(a,b)问题(动态规划)
- MOOC清华《程序设计基础》第6章第2题:求f(a,b)问题(递归法)
- MOOC清华《程序设计基础》第5章:N皇后问题(带矩阵输出)
- MOOC清华《程序设计基础》第6章:三种递推方法求兔子数列问题(斐波那契数列)
- MOOC清华《程序设计基础》第6章:分鱼问题(从A到E递推)
- MOOC清华《程序设计基础》第6章:分鱼问题(从E到A递推)
- hihocoder 2017微软探星夏令营在线技术笔试 1534 Array Partition
- android 8.0 新建文件管理类
- 高斯混合模型(GMM)
- 909422229_基于Jquery的JqGrid列表插件使用
- java 正则
- MOOC清华《程序设计基础》第6章:橱窗插花问题(递推法)
- 【LeetCode】617. Merge Two Binary Trees
- 图像二值化----otsu(最大类间方差法、大津算法)
- glfw使用固定管线设置
- 华为mate8对flex的支持
- 自定义View解决滑动冲突
- C++操作mysql方法总结(1)
- Android Studio无法识别Java文件。红色J
- ISP、IAP、ICP烧写方式的区别