杭电1176 动态规划

来源:互联网 发布:u盘格式化恢复数据 编辑:程序博客网 时间:2024/06/10 20:26
刚上来的时候不太会搞,这道题是一道数塔题的变形,如果按照时间顺序进行搜索到最后还要在11个位置互相的比较大小。所以我们按照逆时间顺序的方法进行动态规划的计算,最后只要输出dp[0] [5]就好了,  所以这道题和数塔的问题非常的像,如果数塔的问题解决了,这道题也不在话下。 #include<iostream> #include<algorithm> #include<cstring> using namespace std; int pie[100010][13],dp[100010][13];    int main(){ int n;  while(cin>>n&&n){  int x,t;  int maxt=0;  memset(pie,0,sizeof(pie));  memset(dp,0,sizeof(dp));while(n--){    cin>>x>>t;    if(maxt<t)    maxt=t;    pie[t][x]++;  }for(int i=maxt;i>=0;i--){    for(int j=0;j<11;j++)    dp[i][j]=max(dp[i+1][j-1],max(dp[i+1][j],dp[i+1][j+1]))+pie[i][j];}cout<<dp[0][5]<<endl;

}
}

0 0
原创粉丝点击