您的位置:首页 > 其它

dp 背包问题01的优化

2017-02-03 22:45 253 查看
不多说,直接上代码!

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAXN 110
int f[MAXN*MAXN];
int dp(int N, int M, int *weight, int *vaule);
int main()
{
int N, M;
int weight[MAXN], vaule[MAXN];
scanf("%d%d", &N, &M);
for(int i=1; i<=N; i++)
{
scanf("%d%d", &weight[i], &vaule[i]);
}
printf("%d\n", dp(N, M, weight, vaule));
return 0;
}

int dp(int N, int M, int *weight, int *vaule)
{
for(int i=1; i<=N; i++)
{
for(int j=M; j>=1; j--)//**注意这里是倒序,坑惨我了**
{
if(weight[i] <= j)
{
f[j] = max(f[j], f[j-weight[i]]+vaule[i]);
}
}
}
return f[M];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: