http://poj.org/problem?id=1837
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 7171 | Accepted: 4321 |
Description
It orders two arms of negligible weight and each arm's length is 15. Some hooks are attached to these arms and Gigel wants to hang up some weights from his collection of G weights (1 <= G <= 20) knowing that these weights have distinct values in the range 1..25. Gigel may droop any weight of any hook but he is forced to use all the weights.
Finally, Gigel managed to balance the device using the experience he gained at the National Olympiad in Informatics. Now he would like to know in how many ways the device can be balanced.
Knowing the repartition of the hooks and the set of the weights write a program that calculates the number of possibilities to balance the device.
It is guaranteed that will exist at least one solution for each test case at the evaluation.
Input
• the first line contains the number C (2 <= C <= 20) and the number G (2 <= G <= 20);
• the next line contains C integer numbers (these numbers are also distinct and sorted in ascending order) in the range -15..15 representing the repartition of the hooks; each number represents the position relative to the center of the balance on the X axis (when no weights are attached the device is balanced and lined up to the X axis; the absolute value of the distances represents the distance between the hook and the balance center and the sign of the numbers determines the arm of the balance to which the hook is attached: '-' for the left arm and '+' for the right arm);
• on the next line there are G natural, distinct and sorted in ascending order numbers in the range 1..25 representing the weights' values.
Output
Sample Input
2 4 -2 3 3 4 5 8
Sample Output
2
Source
题意:输入一个天平若干(<=20)挂钩的位置,将若干(<=20)砝码挂到天平上,问有多少种使天平挂平衡的方法。这次至少是读懂题意了,以前做的时候连题都没有读懂,还是问的龄姐,不过当时还是不大明白为什么就是01背包..现在明白了,砝码只有两种选择要么放要么不放,这不就是01背包的特征吗?想到这里就是要怎么把这题抽象成01背包的模型,01背包一般都是有一个容量的限制,往里面装最大的价值。而这题是要求使得天平挂平衡的方法的个数。确实转不过来。脑子局限于容量的思想,怎么也想不出怎么建立转移方程还是看看神姐的解释http://www.cnblogs.com/lyy289065406/archive/2011/07/31/2122629.html
dp[i][v]表示悬挂i个砝码是所能达到v值得方法数
d[i][j]默示在挂上前i个物体的时,均衡度为j
* (j>0时默示左边重,j=0时默示天均匀衡,j<0时默示右边重)时挂法的数量,
* 而按照题意可以断定j的取值局限为:[-7500,7500],于是可以获得状况转移方程为:
*
*
*
*
http://www.cppblog.com/snowshine09/archive/2011/08/02/152258.html?opt=admin
http://sfiction.blog.163.com/blog/static/1994040102012454308398/
#include<iostream>
#include<cstring>
using namespace std;
const int max1=7500,max2=50;
int c,g,weight[max2],pos[max2],d[max2][max1*2];
int main()
{
}