码迷,mamicode.com
首页 > 其他好文 > 详细

01天平

时间:2018-12-17 20:14:36      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:位置   输出   ios   include   --   数组下标   display   style   nbsp   

http://poj.org/problem?id=1837

是参考网上的,所以,01背包不要单纯的局限在max,min上。

陋见:关键应该是找到最后要输出的那个东西(比如这里的f【m】【7500】),知道答案会保存在这样一个数里后,而且根据经验知道这个下标一般都是最大的数也就是m,即积累到这里。而这题因为是平衡,所以输出的这个数一定是坐标轴的原点——>所以想怎样表示平衡位置(即0-----7500-----15000)。所以知道要设二维数组,使最后输出f[m][7500]。之前考虑过数组里的数存w[]*d[],但是这个作为数组下标后,那数组里保存的数就应该是以1为公差累加的。所以推出动归方程。

技术分享图片
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 int w[25],d[25],f[25][16000];
 8 int main()
 9 {
10     int n,m;
11     while(scanf("%d%d",&n,&m)!=EOF)
12     {
13        for(int i=1;i<=n;i++)
14         scanf("%d",&w[i]);
15        for(int i=1;i<=m;i++)
16         scanf("%d",&d[i]);
17         f[0][7500]=1;
18         for(int i=1;i<=m;i++)
19         {
20             for(int j=0;j<=15000;j++) //7500=25*20*15
21              if(f[i-1][j])
22             {
23               for(int k=1;k<=n;k++)
24                f[i][j+w[k]*d[i]]+=f[i-1][j];
25             }
26         }
27         printf("%d\n",f[m][7500]);
28     }
29     return 0;
30 }
View Code

 

01天平

标签:位置   输出   ios   include   --   数组下标   display   style   nbsp   

原文地址:https://www.cnblogs.com/XXrll/p/10133259.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!