ACM/ICPC2014鞍山現場賽E hdu5074Hatsune Miku
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=5074
題意:
給定一個m*m的矩陣mp,然後給定一個長度為n的序列
sum= mp[a[1]][a[2]]+......+mp[a[n-1]][a[n]];
如果a[i]小於0的話則a[i]可以為1~m之間的任意一個數,求sum的最大值
我們可以列舉第i個位置
然後dp[i][j]=max(dp[i][j],dp[i-1][k]+mp[k][j]) 表示第i個位置在j的最大值;
然後分兩種情況
如果a[i]是一個確定的數的話 dp[i][a[i]]=max( dp[i][a[i]],dp[i-1][j]+mp[j][a[i]] )
如果不確定的話 就只能列舉a[i]了 dp[i][k]=max(dp[i][k],dp[i-1][j]+mp[j][k]);
這兩種情況都是建立在前一個位置已經確定了值的情況下;
程式碼如下:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 55;
int mp[maxn][maxn];
int dp[maxn*2][maxn],a[maxn*2];
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++)
scanf("%d",&mp[i][j]);
}
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(dp,-1,sizeof(dp));
if(a[1]!=-1)
dp[1][a[1]]=0;
else
for(int i=1;i<=m;i++)
dp[1][i]=0;
for(int i=2;i<=n;i++){
for(int j=1;j<=m;j++){
if(dp[i-1][j]!=-1){//如果前一項已經確定
if(a[i]!=-1)
dp[i][a[i]]=max(dp[i][a[i]],dp[i-1][j]+mp[j][a[i]]);
else{
for(int k=1;k<=m;k++)
dp[i][k]=max(dp[i][k],dp[i-1][j]+mp[j][k]);
}
}
}
}
/***************
cout<<" debug "<<endl;
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++)
cout<<dp[i][j]<<" ";
cout<<endl;
}
cout<<"***********"<<endl;
**************/
int maxn = -1000;
for(int i=1;i<=m;i++)
maxn=max(dp[n][i],maxn);
printf("%d\n",maxn);
}
return 0;
}
相關文章
- ACM/ICPM2014鞍山現場賽D Galaxy (HDU 5073)ACM
- 2014鞍山網路賽 E題||hdu 5001 概率dp
- ACM創新實驗室代表隊成功闖入ICPC ACM青島區域賽現場賽ACM
- ACM 田忌賽馬ACM
- ACM-ICPC 2018 南京賽區網路預賽__E AC Challenge【狀態壓縮+DP】ACM
- 第 43 屆 ACM-ICPC 亞洲區域賽(徐州)現場賽名額分配規則及相關說明ACM
- 第43屆ACM-ICPC國際大學生程式設計競賽 亞洲區域賽南京站現場賽名額分配相關說明ACM程式設計
- [比賽總結]ACM div3 G 比賽總結ACM
- ACM 會場安排問題ACM
- 鞍山開飛機票行程單行程
- ACM-ICPC 2018 徐州賽區網路預賽ACM
- ACM-ICPC 2018 瀋陽賽區網路預賽ACM
- 牛客小白月賽100 A~E
- 牛客小白月賽99 C~E
- NYNU_ACM 實驗室招新月賽題解ACM
- 第二十屆西南科技大學ACM程式設計競賽(同步賽)ACM程式設計
- “現代汽車中國前瞻軟體賽杯” 牛客周賽 Round 43 D、E
- NYNU ACM 藍橋杯選拔賽 解題報告ACM
- 牛客小白月賽100 ACM中的CM題ACM
- 牛客小白月賽101 A~E
- 北大主場奪金ACM-ICPC全球總決賽,總教練羅國傑分享背後“祕笈”ACM
- SDNU_ACM_ICPC_2021_Winter_Practice_4th [個人賽]ACM
- 2019山東ACM省賽補題題解ACM
- ACM-ICPC 2018 徐州賽區網路預賽 F. Features TrackACM
- ACM-ICPC 2018 南京賽區網路預賽__B The writing on the wall【列舉】ACM
- 奧運也是IT的賽場
- 山東省第八屆 ACM 省賽 quadratic equation (水、坑)ACM
- ACM-ICPC世界冠軍教你如何備戰程式設計競賽ACM程式設計
- ACM演算法競賽_快速入門v0.1(施工中)ACM演算法
- ACM-ICPC 2018 徐州賽區網路預賽 I. Characters with Hash【簽到題】ACM
- 湖南大學2020屆ACM新生賽 部分題解ACM
- ACM競賽中用到的二進位制處理方法(完善中)ACM
- HDU4592 Boring Game (2013 ACM-ICPC南京賽區全國邀請賽) 高斯消元GAMACM
- 無錫學院2024年ACM大學生程式設計競賽校選賽 題解ACM程式設計
- 群星璀璨 湖南電信IPTV廣場舞總決賽26日、27日現場直播
- 河南理工大學程式設計(ACM)大賽解題報告程式設計ACM
- 第 8 場 小白入門賽
- ACM-ICPC 2018 南京賽區網路預賽__K The Great Nim Game【博弈論+費馬小定理+DP】ACMGAM