2016 ACM/ICPC Reginal Shengyang hdu 5900 QSC and Master (老是忘记枚举第三层循环)
2016-09-19 08:59
351 查看
题意:
给出n(n<=300)个pair:<key,value> 如果相邻两个pair的key不互素,那么可以将这两个pair拿取,得分加上两个value。
问最大得分。
题解:
dp【330】【330】【2】分别代表i到j区间不一定消完和一定消完的最大价值,然后区间dp即可。
尴尬的是,我又忘记第三层循环,卡到死。。。
#include <set> #include <map> #include <stack> #include <queue> #include <deque> #include <cmath> #include <vector> #include <string> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define L(i) i<<1 #define R(i) i<<1|1 #define INF 0x3f3f3f3f #define pi acos(-1.0) #define eps 1e-9 #define maxn 10010 #define MOD 1000000007 int n; pair<int,long long> p[330]; long long dp[330][330][2]; int mp[330][330]; int main() { int t,C = 1; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i = 1; i <= n; i++) scanf("%d",&p[i].first); for(int i = 1; i <= n; i++) scanf("%lld",&p[i].second); memset(mp,0,sizeof(mp)); for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) if(__gcd(p[i].first,p[j].first) != 1) mp[i][j] = 1; memset(dp,0,sizeof(dp)); for(int l = 1; l < n; l++) for(int i = 1; i+l <= n; i++) { int j = i + l; if(l == 1) { if(mp[i][j]) { dp[i][j][0] = p[i].second + p[j].second; dp[i][j][1] = p[i].second + p[j].second; } } else { for(int k = i; k < j; k++) { dp[i][j][0] = max(dp[i][j][0],dp[i][k][0]+dp[k+1][j][0]); if(dp[i][k][1] && dp[k+1][j][1]) dp[i][j][1] = max(dp[i][j][1],dp[i][k][1]+dp[k+1][j][1]); } if(mp[i][i+1]) { long long tmp = p[i].second + p[i+1].second; dp[i][j][0] = max(dp[i][j][0],dp[i+2][j][0]+tmp); if(dp[i+2][j][1]) dp[i][j][1] = max(dp[i][j][1],dp[i+2][j][1]+tmp); } if(mp[j-1][j]) { long long tmp = p[j-1].second + p[j].second; dp[i][j][0] = max(dp[i][j][0],dp[i][j-2][0]+tmp); if(dp[i][j-2][1]) dp[i][j][1] = max(dp[i][j][1],dp[i][j-2][1]+tmp); } if(mp[i][j] && dp[i+1][j-1][1]) dp[i][j][1] = max(dp[i][j][1],dp[i+1][j-1][1]+p[i].second+p[j].second); dp[i][j][0] = max(dp[i][j][0],dp[i][j][1]); } } printf("%lld\n",dp[1] [0]); } return 0; }
相关文章推荐
- hdu 5900 - QSC and Master (2016沈阳网络赛)区间dp
- HDU 5900 QSC and Master(2016亚洲区沈阳站网络赛)
- HDU 5900 QSC and Master(2016 ACM/ICPC Asia Regional Shenyang Online)
- 2016 ACM/ICPC Asia Regional Shenyang Online HDU 5900 QSC and Master(区间dp水题)
- hdu 5900 QSC and Master 区间dp(2016 ACM/ICPC Asia Regional Shenyang Online)
- HDOJ 5900 QSC and Master 【2016沈阳网赛】区间DP
- 【2016-沈阳赛区网络赛-I】区间DP(QSC and Master,hdu 5900)
- HDU 5900-QSC and Master - 区间 の dp
- hdu 5900 QSC and Master (区间dp)
- HDOJ 5900 QSC and Master
- Hdu-5900 QSC and Master(区间DP)
- 【HDU5900 2016 ACM ICPC Asia Regional Shenyang Online I】【区间DP】QSC and Master 相邻互质取数最大取值.cpp
- HDU 5900 QSC and Master (区间DP)
- HDU 5900 QSC and Master 区间DP
- hdu 5900 QSC and Master
- HDU 5900 QSC and Master (区间DP 记忆化搜索)
- HDU-5900-QSC and Master(区间DP)
- 2016ICPC沈阳网赛 HDU 5900 QSC and Master 区间DP
- HDU 5900 QSC and Master (区间DP)
- hdu 5900 QSC and Master(acm/icpc沈阳网络赛,区间DP)