UVa 10123 - No Tipping
来源:互联网 发布:淘宝双11红包怎么领 编辑:程序博客网 时间:2024/05/19 10:09
題目:在一個有兩個支點的槓桿上(支點在-1.5,+1.5),已知桿長和質量,以及上面的重物,
問是否存在一個順序可以把所有的物品都拿下來,並且不打破平衡。
分析:狀態壓縮、記憶化搜索。數據較小,利用位表示選取狀態,每次兩個支點分別判斷平衡即可。
說明:注意開始時的平衡狀態,dp也可以╮(╯▽╰)╭。
#include <cstdio>#include <cstring>int states[1<<20], front[1<<20], space[20], weight[20];double balance(int n, int select, double support){double left = 0, right = 0;for (int i = 0; i < n; ++ i) if ((1<<i)&select) {if (space[i] < support) {left += weight[i]*(support-space[i]);}else {right += weight[i]*(space[i]-support);}}return left - right;}int test(int n, int select, double w){return (balance(n, select, -1.5)-w <= 0)&&(balance(n, select, 1.5)+w >= 0);}int save[20];int dfs(int n, int d, int state, double w){if (!states[state]) {states[state] = 1;}else {return 0;}if (!state) {for (int i = 0; i < n; ++ i)printf("%d %d\n",space[save[i]], weight[save[i]]);return 1;}for (int i = 0; i < n; ++ i) {if ((state&(1<<i)) && test(n, state-(1<<i), w)) {save[d] = i; if (dfs(n, d+1, state-(1<<i), w))return 1;}}return 0;}int main(){int l, m, n, cases = 1;while (~scanf("%d%d%d",&l,&m,&n) && l+m+n) {for (int i = 0; i < n; ++ i)scanf("%d%d",&space[i],&weight[i]);printf("Case %d:\n",cases ++);memset(states, 0, sizeof(states));if (test(n, (1<<n)-1, 0.75*m) && !dfs(n, 0, (1<<n)-1, 0.75*m))puts("Impossible");} return 0;}
0 0
- uva 10123 - No Tipping
- UVa 10123 - No Tipping
- uva 10123 No Tipping
- uva 10123 No Tipping
- UVA 10123 - No Tipping
- UVA 10123 No Tipping
- UVA 10123 No Tipping
- UVa 10123 - No Tipping
- UVA 10123 No Tipping
- uva 10123 No Tipping (状压dp)
- UVA - 10123 No Tipping 剪枝+dfs
- UVA No Tipping
- uva 10123 No Tipping(DFS+几何力矩+贪心)
- UVA 10123 No Tipping (物理+贪心+DFS剪枝)
- uva :10123 - No Tipping(dfs + 几何力距 )
- UVA - 10123 No Tipping(回溯+剪枝+贪心)
- uva 10123 No Tipping(逆向思维+力矩)
- UVa10123 No Tipping
- Valid Palindrome(easy)
- tcpdump抓包
- Spring如何加载XSD文件(org.xml.sax.SAXParseException: Failed to read schema document错误的解决方法)
- (考研)数据结构及算法
- H5网站如何检测移动设备横竖屏并旋转?
- UVa 10123 - No Tipping
- android:ListView下拉刷新上拉加载更多(PullToRefresh框架抽取)
- Unable to locate an executable at “/usr/bin/java/bin/java” (-1)
- jsp 总结
- oracle如何修改字段?
- 字符编码、字符存储、字符转换及工程中字符的使用
- 项目启动,无法加载Spring xsd文件
- spring-security实现权限管理
- 各个排序算法的总结