poj 1837 Balance
2015-08-21 16:19
330 查看
Description
Gigel has a strange "balance" and he wants to poise it. Actually, the device is different from any other ordinary balance.
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 input has the following structure:
• 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
The output contains the number M representing the number of possibilities to poise the balance.
Sample Input
Sample Output
Gigel has a strange "balance" and he wants to poise it. Actually, the device is different from any other ordinary balance.
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 input has the following structure:
• 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
The output contains the number M representing the number of possibilities to poise the balance.
Sample Input
2 4 -2 3 3 4 5 8
Sample Output
2
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <queue> #include <stack> #include <set> #include <map> #include <cmath> #include <algorithm> #define RR freopen("in.txt","r",stdin) #define WW freopne("out.txt","w",stdout) #define LL long long #define INF 0x3f3f3f3f using namespace std; int C,G; int dp[25][15010]; int c[30],k[30]; int main() { std::ios::sync_with_stdio(false); while(cin>>C>>G) { for(int i=1;i<=C;i++) { cin>>c[i]; } for(int i=1;i<=G;i++) { cin>>k[i]; } memset(dp,0,sizeof(dp)); dp[0][7500] = 1; for(int i=1;i<=G;i++) { for(int j=0;j<=15000;j++) { if(dp[i-1][j]) { for(int e=1;e<=C;e++) { dp[i][j+k[i]*c[e]] = dp[i][j+c[e]*k[i]] + dp[i-1][j]; } } } } cout<<dp[G][7500]<<endl; } return 0; }
相关文章推荐
- [黑马程序员]C语言结构体
- 如何成为一名教练型领导者
- C++中的set_new_handler和new_handler 【未完待续】
- [MongoDB] - mongod.exe参数详解
- C++字符串转数字,数字转字符串
- 毫秒必争,前端网页性能最佳实践
- [SoapUI] Global Scripts For Reusability
- 播放视频的方法
- POJ2406
- Invalid bound statement (not found)
- motion 摄像头监控,动作捉拍软件
- android framework 低电量关机处理流程 浅析
- Trie树的常见应用大总结(面试+附代码实现)
- ObjectAnimator不包含百分比移动的替代方法
- node.js基础:数据存储
- Shell 练习题(append)
- Git详解之三 Git分支
- Gradle上传 aar到JCenter
- hdu1114-E - Piggy-Bank(完全背包)
- INSTALL_FAILED_INSUFFICIENT_STORAGE