POJ-1837-Balance-0 1背包
来源:互联网 发布:周杰伦的影响力知乎 编辑:程序博客网 时间:2024/05/29 19:18
背包问题,先找状态方程。
输入c,g。c代表挂钩的数量。g代表砝码的数量。
然后输入c个数代表挂钩的位置。
g个数代表砝码的质量。
判断当g个砝码都放上去的时候,平衡状态一共有几种。
对于可能的状态为-7500~7500(7500=15*20*25)即为0~15000;
设立状态数组dp[21][15000];21代表着放上去的砝码的个数,共有20种可能,因为最多只有20个砝码。
15000代表着此时的状态,7500时为平衡状态。
显然可以得到状态方程:
if(dp[i-1][j]){ for(i=1;i<=c;i++) { dp[i][j+a[k]*b[i]]+=dp[i-1][j]; }}则dp[g][7500]的数值即为当所有的砝码都放上去的时候,平衡状态的种类了;
程序:
#include<iostream>#include<cstdlib>#include<cstring>using namespace std;int main(){ int c,g,i,k,j; int a[50],b[50]; int dp[21][15001]; cin>>c>>g; for(i=0;i<c;i++)//挂钩 cin>>a[i]; for(i=0;i<g;i++)//砝码 cin>>b[i]; memset(dp,0,sizeof(dp)); dp[0][7500]=1; for(i=1;i<=g;i++) { for(j=0;j<=15000;j++) { if(dp[i-1][j]) { for(k=0;k<c;k++)//挂钩 { dp[i][j+a[k]*b[i-1]]+=dp[i-1][j]; } } } } cout<<dp[g][7500]<<endl; return 0;}
- POJ-1837-Balance-0 1背包
- POJ 1837 Balance 0-1背包
- poj 1837 Balance (0 1 背包)
- poj 1837 Balance(背包)
- No.1 DP 背包 POJ 1837 Balance
- poj 1837 Balance(01背包)
- poj 1837 Balance--01背包
- poj 1837 Balance 01背包
- poj 1837 Balance (01背包)
- poj 1837 Balance(背包)
- POJ 1837 Balance / 分组背包
- poj 1837 Balance (01背包)
- POJ 1837 Balance 背包变形
- POJ 1837 Balance(01背包)
- POJ 1837 Balance 背包dp
- Poj 1837 Balance(背包)
- POJ 1837 Balance (01背包)
- POJ 1837-Balance(01背包)
- html
- struts配置文件action中scope引起的问题
- Linux多线程使用实例
- MySQL数据库备份和还原的常用命令 和 copy database
- HttpHandler与HttpModule区别
- POJ-1837-Balance-0 1背包
- java环境变量配置
- 一道腾讯面试题
- DP动态规划——最大数字子串
- innodb优化后,29小时入库1300万条数据
- IIS7中Integrated和classic的区别
- 有关Android 访问WCF的有关问题
- request.getParameterValues()用法
- const关键字