poj 1837 Balance(背包)
来源:互联网 发布:js 大屏幕 倒计时特效 编辑:程序博客网 时间:2024/06/05 04:53
看完题。。完全想不到怎么来建立背包模型。。
看了下别人的思路,吃了个惊。
大神的题解:点击打开链接
题目大意:有一个天平,告诉你挂钩的位置,还有一些砝码的重量,让你来求解有几种组合使得当所有的砝码都挂在天平上的时候天平可以平衡。
数据:
2 4 //天平挂钩的位置跟砝码的数量
-2 3 //挂钩的位置,负数表示在天平的左边,正数表示挂钩在天平的右边
3 4 5 8 //砝码的重量
dp思路的由来:当每次放入一个砝码的时候,天平的状态会发生改变,当前状态由前一状态得到。
首先确定下平衡,平衡度最大的情况是15000,所以平衡度为7500时天平平衡,
dp[i][j]表示在挂前i个砝码的时候,平衡度为j的组合的数量。
可得dp[i][j+c[k]*w[i]] += dp[i-1][j];
所以就这样变成了01背包问题。
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int dp[25][15010];int main(){#ifdef LOCAL freopen("in.txt","r",stdin);#endif // LOCAL int n,g; int c[25],w[25]; cin>>n>>g; for(int i = 1 ; i <= n ; i++) { cin>>c[i]; } for(int i = 1 ; i <= g ; i++) { cin>>w[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 k = 1 ; k <= n ; k++) { dp[i][j+c[k]*w[i]] += dp[i-1][j]; } } } } cout<<dp[g][7500]<<endl; return 0;}
0 0
- poj 1837 Balance(背包)
- Poj 1837 Balance(背包)
- poj 1837 Balance (背包)
- poj 1837 Balance(背包)
- poj 1837 Balance(01背包)
- poj 1837 Balance (dp 01背包)
- poj 1837 Balance (01背包变形)
- poj 1837 Balance (0 1 背包)
- poj 1837 Balance (dp,01背包)
- POJ 题目1837 Balance(分组背包)
- POJ 1837 Balance(01背包问题)
- 【POJ 1837】Balance(01背包)
- POJ 1837 Balance (DP-01背包)
- poj 1837 Balance(01背包)
- poj 1837 Balance--01背包
- poj 1837 Balance 01背包
- poj 1837 Balance (01背包)
- POJ 1837 Balance / 分组背包
- 组合问题(从M个不同字符中任取N个字符的所有组合)
- ACM-简单题之进制转换——hdu2031
- UVA Power of Cryptography
- 题目1188:约瑟夫环
- Matlab作图(基础指令)
- poj 1837 Balance(背包)
- MFC—日积月累
- 【算法导论】计算多项式实现
- Determining IP information for eth0...failed
- 数据类型和Json格式
- 大端存储和小端存储,网络字节序
- code forces 399B Red&Blue Balls
- 64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考
- linux get eth? ipaddress