拯救少林神棍 代码有注释
来源:互联网 发布:知乎网源码 编辑:程序博客网 时间:2024/04/27 18:45
拯救少林神棍
#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <memory.h>#include <stdlib.h>#include <vector>#include <algorithm>#include <functional> // std::greaterusing namespace std;int T, N;int L;int nLastStickNo;//最近拼上去的那条木棒的下标vector<int> anLength;int anUsed[65];//是否用过的标记int i, j, k;int Dfs(int R, int M);int main(){ while (1) {cin >> N;if (N == 0)break;int nTotalLen = 0;anLength.clear();for (int i = 0; i < N; i++) {int n;cin >> n;anLength.push_back(n);nTotalLen += anLength[i];}sort(anLength.begin(), anLength.end(), greater<int>());//从最长的第一根小棒开始,直到总长度的一半 for (L = anLength[0]; L <= nTotalLen / 2; L++) {if (nTotalLen % L)//如果不可以全拼完 ,L长度就不是continue;memset(anUsed, 0, sizeof(anUsed));if (Dfs(N, L)) {cout << L << endl;break;}}if (L > nTotalLen / 2)//如果大于小棒总长度的一半 输出总长度cout << nTotalLen << endl;} // while return 0;} //nUnusedSticks 还剩小棍数量int Dfs(int nUnusedSticks, int nLeft)// nLeft表示当前正在拼的棍子和 L 比还缺的长度{if (nUnusedSticks == 0 && nLeft == 0)return true;if (nLeft == 0) //一根刚刚拼完nLeft = L; //开始拼新的一根int nStartNo = 0;if (nLeft != L) //剪枝4nStartNo = nLastStickNo + 1;//nLastStickNo 最近拼上去的那条木棒的下标for (int i = nStartNo; i < N; i++) {//遍历所有小棍if (!anUsed[i] && anLength[i] <= nLeft) {//没有被使用过且 小于棒子还差的长度if (i > 0) {//不是第一根if (anUsed[i - 1] == false && anLength[i] == anLength[i - 1])//前一根没有被使用 且长度一样continue; //剪枝1}anUsed[i] = 1; nLastStickNo = i;if (Dfs(nUnusedSticks - 1,nLeft - anLength[i]))return true;else {anUsed[i] = 0;//说明本次不能用第i根 //第i根以后还有用if (anLength[i] == nLeft || nLeft == L)return false;//剪枝3、2}}}return false;}
0 0
- 拯救少林神棍 代码有注释
- POJ 1011 Sticks(拯救少林神棍)__深搜
- 【DFS+多次剪枝】HDU1455Sticks【POJ少林神棍】
- 有一种单身叫宁缺勿滥 -- 纪念百年神棍节
- Even Odds代码与分析,有注释
- 经典的初学编程代码,有注释。
- python字符串、元祖、列表(有代码有注释)
- 神棍节~
- 新改的jmail发送邮件代码,有注释
- 初尝Linq,代码贴出来,有详细的注释
- VS VC 显示有日文的代码注释
- PE感染型病毒代码 大部分有注释
- 在php中实现分页代码 有注释
- webview学习记录(有比较详细的代码注释)
- PE感染型病毒代码 大部分有注释
- Webview与js交互漏洞及解决方法(有注释代码)
- 贪吃蛇来啦,js代码,有详细注释,初学者参考,共勉
- Head First Python代码实践(第六章)有注释
- TabLayout选项卡
- 良好性能和高质量视觉效果
- Linux下修改Tomcat默认端口
- redis 常用命令行
- 几句话实现导航栏透明渐变-iOS
- 拯救少林神棍 代码有注释
- error C2275 将此类型用作表达式非法
- linux sed学习总结
- RMQ模板
- @propert和@@synthesize的含义与区别
- LeetCode之分糖果
- POJ3273
- 从VB来看-BubbleSort(VB冒泡排序)
- 关于少量数据的svm、svr和logistics的分类比较