hihocoer系列

p1364 奖券兑换

题目：

输入



分析：

0-1背包问题，时间复杂度O(NM)，空间复杂度O(NM)

for(int i = 0;i <= M;i ++)
dp[0][i] = 0;
for(int i = 1;i <= N;i ++)
for(int j = 0;j <= M;j ++)
dp[i][j] = max(dp[i-1][j], dp[i-1][j-W[i]]+P[i]);

0-1背包问题,空间复杂度优化O(M)

for(int i = 0;i <= M;i ++)
dp[i] = 0;
for(int i = 1;i <= N;i ++)
for(int j = M;j >= 0;j --)
dp[j] = max(dp[j], dp[j-W[i]]+P[i]);

N件物品，第i件物品重量为Wi，价值为Pi，数量为Ci。求容量为M的背包可取物品的最大价值。
O(NMK)(K为物品的最大数量)的写法

for(int i = 0;i <= M;i ++)
dp[0][i] = 0;
for(int i = 1;i <= N;i ++)
for(int j = 0;j <= M;j ++)
for(int k = 0;k <= C[i];k ++)
dp[i][j] = max(dp[i][j], dp[i-1][j-W[i]*k]+P[i]*i);

int count = 0;
int bitP[maxm];
int bitW[maxm];

for(int i = 1;i <= N;i ++){
int k;
for(k = 1;(k<<1) <= C[i];k <<= 1){
bitP[count] = P[i]*k;
bitW[count] = W[i]*k;
count ++;
}
bitP[count] = P[i]*(C[i]-k+1);
bitW[count] = W[i]*(C[i]-k+1);
count ++;
}   

代码

#include <iostream>
#include <stdio.h>
using namespace std;

#define maxm(a, b) ((a)>(b)?(a):(b))

#define MAXW 10
#define MAXP 10
#define MAXCOUNT 2000
#define MAXM 100000

int ticket[MAXW][MAXP];
int W[MAXCOUNT];
int P[MAXCOUNT];
int dp[MAXM + 1];

int n, m, count;

int main()
{
cin>>n>>m;

for(int i = 0;i < MAXW;i ++)
for(int j = 0;j < MAXP;j ++)
ticket[i][j] = 0;

int w, p;
for(int i = 0;i < n;i ++){
scanf("%d %d", &w, &p);
ticket[w-1][p-1] ++;
}

int k, count = 0;
for(int i = 0;i < MAXW;i ++){
for(int j = 0;j < MAXP;j ++){
for(k = 1;(k<<1) <= ticket[i][j]; k <<= 1){
W[count] = (i+1)*k;
P[count] = (j+1)*k;
count ++;
}
W[count] = (i+1)*(ticket[i][j] - k + 1);
P[count] = (j+1)*(ticket[i][j] - k + 1);
count ++;
}
}

for(int i = 0;i <= m;i ++)
dp[i] = 0;

for(int i = 0;i < count;i ++){
for(int j = m;j >= 0;j --){
if(j >= W[i]){
dp[j] = maxm(dp[j], dp[j-W[i]] + P[i]);
}
}
}

cout<<dp[m]<<endl;
return 0;
}

hihocoder题库1014

2015-10-10 23:19:45

hihoCoder - 1015 - KMP算法

2015-02-20 01:13:04

ACM解题总结——HihoCoder1199 (微软笔试题)

2016-08-03 21:25:35

hihocoder 1360 凸多边形

2016-08-14 18:34:57

微软笔试题 HihoCoder#1137: Recruitment 题解

2015-08-30 18:01:02

hihoCoder 题目答案

2017-10-04 16:10:23

hihocoder Challenge 29 D. 不上升序列

2017-06-29 17:32:46

hihocoder 1441 : 后缀自动机一·基本概念

2017-10-10 17:37:16

[堆] hihoCoder Challenge 29 D. 不上升序列

2017-06-26 15:54:44

微软2016校园招聘4月在线笔试 hihocoder 1289 403 Forbidden

2016-04-07 15:17:54

hihocoder笔记