POJ 1837-Balance(01背包)
2015-08-03 16:39
393 查看
题目地址:POJ 1837
题意:有一个天平,左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数。
思路:可以把天枰看做一个以x轴0点作为平衡点的横轴。
定义一个 状态数组dp[i][j],意为在挂满前i个钩码时,平衡度为j的挂法的数量。当j=0时,说明天枰达到平衡,j>0,说明天枰倾向右边(x轴右半轴),j<0则相反。由于距离c[i]的范围是-15~15,钩码重量的范围是1~25,钩码数量最大是20。最极端的平衡是将所有的都挂在最远端,所以15*25*20=7500.所以有dp[1~20][-7500~+7500],为了不让下标出现负数,所以dp[1~20][0~15000],则7500成了平衡点。
题意:有一个天平,左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数。
思路:可以把天枰看做一个以x轴0点作为平衡点的横轴。
定义一个 状态数组dp[i][j],意为在挂满前i个钩码时,平衡度为j的挂法的数量。当j=0时,说明天枰达到平衡,j>0,说明天枰倾向右边(x轴右半轴),j<0则相反。由于距离c[i]的范围是-15~15,钩码重量的范围是1~25,钩码数量最大是20。最极端的平衡是将所有的都挂在最远端,所以15*25*20=7500.所以有dp[1~20][-7500~+7500],为了不让下标出现负数,所以dp[1~20][0~15000],则7500成了平衡点。
#include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <sstream> #include <algorithm> #include <set> #include <queue> #include <stack> #include <map> #pragma comment(linker, "/STACK:102400000,102400000") using namespace std; typedef long long LL; const int inf=0x3f3f3f3f; const double pi= acos(-1.0); const double esp=1e-6; int dp[25][15010]; int c[25]; int g[25]; int main() { int C,G; int i,j,k; while(~scanf("%d %d",&C,&G)){ memset(dp,0,sizeof(dp)); for(i=1;i<=C;i++) scanf("%d",&c[i]); for(i=1;i<=G;i++) scanf("%d",&g[i]); dp[0][7500]=1;//不挂钩码达到平衡 for(i=1;i<=G;i++) for(j=1;j<=15000;j++) for(k=1;k<=C;k++) dp[i][j+g[i]*c[k]]+=dp[i-1][j]; printf("%d\n",dp[G][7500]); } return 0; }
相关文章推荐
- egit push到gihub里提醒reject non - fast -forward
- 通俗说说DSP、SSP、RTB、DMP是什么
- 《程序员面试宝典》--约瑟夫环
- 大二暑假时对计算机的一些想法
- ServletContext中的转发
- ListView,图片,两行内容
- 织梦sitemap地图实时推送给百度的教程
- 索引
- HDOJ2089不要62【数位dp】
- tomcat升级报错
- [基本实验] 远程桌面攻击
- OSAL函数分析-osalTimerUpdate
- IOS LocationManager定位国内偏移,火星坐标(GCJ-02)解决方法
- 倾情大奉送--Spark入门实战系列
- Selenium2学习-029-WebUI自动化实战实例-027-判断元素是否存在
- 输入中包含特定模式或字符串的各行打印出来
- HDOJ 2612 Find a way【最短路 双重bfs】
- poj1487--Single-Player Games(高斯消元)+测试数据
- HDOJ 2612 Find a way【最短路 双重bfs】
- adt下载地址