hihocoder #1486 : 物品价值
Posted HelloWorld!--By-MJY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hihocoder #1486 : 物品价值相关的知识,希望对你有一定的参考价值。
dp[i][j] 到第i个物品 状态为 j 的二进制串 能得到的最大价值
#include<cstdio> #include<cstring> #include<map> #include<iostream> #include<algorithm> #include<math.h> #include<map> #include<queue> #include<set> #include<vector> using namespace std; #define inf 1000000007 #define ll long long #define MAXN 1010 int dp[MAXN][(1<<10)+10]; int main() { int t; scanf("%d",&t); while(t--) { int n,m; scanf("%d%d",&n,&m); int ed=1<<m; for(int i=0;i<=n;i++) { for(int j=0;j<=ed;j++) dp[i][j]=-inf; } dp[0][0]=0; int d=ed-1; for(int i=1;i<=n;i++) { int w,k; scanf("%d%d",&w,&k); int a=0; for(int j=1;j<=k;j++) { int b; scanf("%d",&b); b--; a=a+(1<<b); } for(int j=0;j<=d;j++) { dp[i][j^a]=max(dp[i-1][j]+w,dp[i][j^a]); dp[i][j]=max(dp[i-1][j],dp[i][j]); } } int mx=0; mx=max(mx,dp[n][d]); cout<<mx<<endl; } return 0; }
#include<cstdio> #include<cstring> #include<map> #include<iostream> #include<algorithm> #include<math.h> #include<map> #include<queue> #include<set> #include<vector> using namespace std; #define inf 1000000007 #define ll long long #define MAXN 1010 int dp[MAXN][(1<<10)+10]; int main() { int t; scanf("%d",&t); while(t--) { int n,m; scanf("%d%d",&n,&m); int ed=1<<m; for(int i=0;i<=n;i++) { for(int j=0;j<=ed;j++) dp[i][j]=-inf; } dp[0][0]=0; int d=ed-1; for(int i=1;i<=n;i++) { int w,k; scanf("%d%d",&w,&k); int a=0; for(int j=1;j<=k;j++) { int b; scanf("%d",&b); b--; a=a+(1<<b); } for(int j=0;j<=d;j++) { dp[i][j^a]=max(dp[i-1][j]+w,dp[i][j^a]); dp[i][j^a]=max(dp[i-1][j^a],dp[i][j^a]); } } int mx=0; mx=max(mx,dp[n][d]); cout<<mx<<endl; } return
以上是关于hihocoder #1486 : 物品价值的主要内容,如果未能解决你的问题,请参考以下文章
hihocoder offer收割编程练习赛11 B 物品价值
HihoCoder 1638 : 小Hi的天平 (2-sat+并查集)