HDU 1455 Sticks
来源:互联网 发布:mac 室内设计软件 编辑:程序博客网 时间:2024/05/20 04:27
大意:给出T根棍子,让你把他们拼成几根相同长度的棍子,问棍子数最多的时候长度是多少(棍子长度最短的时候长度是多少)。
这题跟HDU1518的做法差不多。那题是固定只有4边,这题只不过变成根数是改变的而已。依旧DFS解决。
#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>using namespace std;bool flag[65];int a[65],n,t;bool comp(int a,int b){ return a>b;}bool DFS(int l,int j,int len,int count1)//l代表组合棍子的长,j代表下一个棍子起始位置,len代表该种情况下一根组合棍的长度,count1表示组合了多少根。{ if(l == len) { l = 0; j = 0; count1++; if(count1 == n) return true; } for(int i = j ; i < t ; i ++) { if(!flag[i]) { flag[i] = true; if(l+a[i] <= len) { bool boom = DFS(l+a[i],i+1,len,count1); if(boom&&!flag[0]) return false; else if(boom) return true; } flag[i] = false; while(a[i] == a[i+1]) i++; } } return false;}int main(){ int maxlen,minlen,ans = 0; while(~scanf("%d",&t)&t) { maxlen = minlen = 0; memset(flag,false,sizeof(flag)); for(int i = 0 ; i < t ; i ++) { scanf("%d",&a[i]); minlen = max (minlen , a[i]); maxlen += a[i]; } sort(a,a+t,comp);//对棍子长度排个序。 for(int i = minlen ; i <= maxlen ; i++) {//枚举棍子长度。 if(maxlen % i == 0) { n = maxlen / i;//根数 ans = i;//长度。 if(DFS(0,0,i,0)) { break;//找到最短的停止。 } } } printf("%d\n",ans); } return 0;}
0 0
- HDU 1455 Sticks
- Hdu 1455 Sticks
- hdu 1455 Sticks
- HDU 1455 Sticks
- hdu 1455 Sticks
- hdu 1455 Sticks
- HDU 1455 Sticks
- 【DFS】hdu 1455 Sticks
- Sticks hdu 1455
- hdu 1455 sticks
- HDU 1455 Sticks
- HDU 1455 Sticks
- HDU 1455 Sticks
- HDU 1455 Sticks
- day3 HDU 1455 Sticks
- hdu 1455 Sticks
- HDU 1455 Sticks
- hdu 1455 hdu 1455 Sticks
- LVS+Keepalived 部署
- UESTC 250 数位dp(数字相位数之间的差值不小于2)
- mongodb安装配置
- NYOJ 144 小珂的苦恼【扩展gcd】
- Android | Vuforia 模型平移、旋转、放缩
- HDU 1455 Sticks
- mysql配置文件my.cnf部分参数详解
- leetcode_112_Path Sum
- The connection to adb is down, and a severe error has occured.
- 寻找单链表中倒数第k个结点
- Notes03:侧边导航菜单
- matlab bar图x轴坐标旋转函数
- v$asm_diskgroup和v$asm_disk中对于 disk 大小的不同含义
- php 列队处理 array_push array_unshift array_pop array_shift