DP入门

来源:互联网 发布:陈绮贞矿泉水洗澡 知乎 编辑:程序博客网 时间:2024/05/03 17:48

  • ZigZag - 2003 TCCC Semifinals 3

题意:选出一个序列,满足,相邻两个只差,正负交错,求最长的。

class ZigZag{public :    int longestZigZag(vector <int> sequence)   {   int dp[55][2];   cle(dp);   int len=sequence.size();   if(len==1)return 1;   dp[0][1]=1;   dp[0][0]=1;   int i,j,k;   for(i=1;i<len;i++){   for(j=0;j<i;j++){   if(sequence[j]>sequence[i])   {   dp[i][1]=max(dp[i][1],dp[j][0]+1);   }   else if(sequence[j]<sequence[i]){   dp[i][0]=max(dp[i][0],dp[j][1]+1);   }   }   }   int ans=0;   rep(i,len){   ans=max(ans,dp[i][0]);   ans=max(ans,dp[i][1]);   }   cout<<ans<<endl;       return ans;   }};


  • BadNeighbors - 2004 TCCC Round 4
  • 题意:围成一个环的一些数,选择一些数,满足不能同时选择相邻的,求最大的和。
  • class BadNeighbors{public:       int maxDonations(vector <int> donations)   {   int dp[55][2];   int len=donations.size();   int i,j,k;   cle(dp);   rep(i,len){   dp[i][0]=donations[i];   }   dp[0][0]=0;   dp[0][1]=donations[0];   rep(i,len)   {   for(j=0;j<i-1;j++)   {   if((i+1)%len==j)continue;   dp[i][0]=max(dp[i][0],dp[j][0]+donations[i]);   dp[i][1]=max(dp[i][1],dp[j][1]+donations[i]);   }   }   int ans=0;   rep(i,len){   if(i==len-1)   {   ans=max(ans,dp[i][0]);   break;   }   ans=max(ans,dp[i][1]);   ans=max(ans,dp[i][0]);   }   return ans;   }};


  • FlowerGarden - 2004 TCCC Round 1
一直没看懂题意~,~

0 0
原创粉丝点击