二维费用的背包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
int f[999][999];
int m,n,k;
int w[9999],c[9999],s[9999];
int main()
{

freopen("gas.in","r",stdin);
freopen("gas.out","w",stdout);
memset(f,127,sizeof(f));
scanf("%d%d%d",&m,&n,&k);
f[0][0]=0;
for(int i=1;i<=k;i++)
{
scanf("%d%d%d",&w[i],&c[i],&s[i]);
}
for(int i=1;i<=k;i++)
for(int j=m;j>=0;j--)
for(int q=n;q>=0;q--)
{
int t1=j+w[i];
int t2=q+c[i];
if(t1>m) t1=m;
if(t2>n) t2=n;
f[t1][t2]=min(f[t1][t2],f[j][q]+s[i]);
}
printf("%d",f[m][n]);
fclose(stdin);
fclose(stdout);
return 0;
}
最近的文章

低价购买

第一问很好做,就是一个很简单的dp求最长下降子序列。第二问就有一些问题了,怎么找最大的方案数呢?那就需要看状态了,i位置的方案数只能由比他小一的位置转移过来,而且每一个都能转移过来,所以说因为第一问求出f[i]了所以递推方程式为 t[i]=∑t[j] (f[j]+1=f[i])但还有一个问题,不能 …

于  dp 继续阅读
更早的文章

清北学堂入学测试d

清北学堂入学测试d需要加回去啊啊啊啊啊啊!123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include&lt;cstdio&gt;#include&lt;algorith …

于  2016 继续阅读