状压:物品价值-关灯问题
(2020-09-27 21:40:45)分类: 动态规划 |
三)Hihocoder 杂货铺P1846 ABC (vjudge)
输入
输出
样例输入
样例输出
#include "bits/stdc++.h"
using namespace std;
int f[101];
struct bag{ int v,w;} a[1100];
int main(){
}
完善程序,单选题:
(1)(B)
A) i <= (1<<m) B) i <
(1<<m) C) i <
(1<<n) D) i <= (1<<n)
(2)(D)
A)j < (1<<m) B)j <
(1<<n) C)j
<
strlen(s) D) j
<
s.size()
(3)(A)
(4)(C)
A) j < (1<<m)
B) j <=
(1<<m) C) j
<
(1<<n) D) j <= (1<<n)
(5)(A)
A) f[j|a[i].w]=min(f[j|a[i].w],f[j]+a[i].v);
B) f[j-a[i].w]=min(f[j-a[i].w],f[j]+a[i].v);
C) f[j+a[i].w]=min(f[j+a[i].w],f[j]+a[i].v);
C) f[j^a[i].w]=min(f[j^a[i].w],f[j]+a[i].v);
f[j|a[i].w]=min(f[j|a[i].w],f[j]+a[i].v);二)Hihocoder P1486 物品价值 (vjudge)
输入
输出
样例输入
样例输出
首先对于状态表示,题目说必须是奇数个,是不是可以想到,用1表示放了奇数个,0表示放了偶数个,那么通过异或操作就可完成放入过程了(可以自己手动推一下为什么异或可以表示放入状态)。
用f[i][j]表示在放入第i个物品,状态为j的时候的最优解,则可以列出和上题类似的状态转移方程:
f[i][j∧a[i].w]=max(f[i][j∧a[i].w],f[i-1][j]+a[i].v);
#include "bits/stdc++.h"using namespace std;
struct rec{int v,w;}a[1010];
int f[2050][2050];
int main(){