动态规划合集(二)

匿名 (未验证) 提交于 2019-12-02 23:48:02

防卫导弹

//程序名:新的C++程序 //作者:   #include<iostream> #include<fstream> #include<algorithm>  using namespace std; int a[4005],p,dp[4005],ans; int main() {     while(cin>>a[++p]);     p--;     for(int i=p;i>=1;i--)     {         for(int j=i+1;j<=p;j++)if(a[j]<=a[i])dp[i]=max(dp[i],dp[j]);         dp[i]++;     }     for(int i=1;i<=p;i++)ans=max(ans,dp[i]);     cout<<ans;     return 0; }
View Code

会议厅

#include<iostream> #include<algorithm> using namespace std; int n,ans; int dp[10005]; struct talk {     int start,end; }a[10005]; bool cmp(talk x,talk y) {     if(x.end==y.end)return x.start<y.start;     return x.end<y.end; } int main() {     cin>>n;     for(int i=1;i<=n;i++)cin>>a[i].start>>a[i].end;     sort(a+1,a+1+n,cmp);     for(int i=1;i<=n;i++)     {         int maxx=0;         for(int j=1;j<=i;j++)if(dp[j]>maxx&&a[i].start>=a[j].end)maxx = dp[j];         dp[i]=maxx+a[i].end-a[i].start;         ans=max(ans,dp[i]);     }     cout<<ans;     return 0; }
View Code

合唱队形

//程序名:新的C++程序 //作者:   #include<iostream> #include<fstream> #include<algorithm>  using namespace std; int n,a[105],dpl[105],dpr[105],ans; int main() {     cin>>n;     for(int i=1;i<=n;i++)cin>>a[i];     for(int i=1;i<=n;i++)     {         for(int j=i-1;j>=1;j--)if(a[j]<a[i])dpl[i]=max(dpl[i],dpl[j]);         dpl[i]++;     }     for(int i=n;i>=1;i--)     {         for(int j=i+1;j<=n;j++)if(a[j]<a[i])dpr[i]=max(dpr[i],dpr[j]);         dpr[i]++;     }     for(int i=1;i<=n;i++)ans=max(ans,dpl[i]+dpr[i]);     cout<<n-ans+1;     return 0; }
View Code

石子归并

//程序名:新的C++程序 //作者:   #include<iostream> #include<fstream> #include<algorithm> using namespace std; int p,a[105],n,s[105][105]; int main() {     cin>>n;     for(int i=1;i<=n;i++)cin>>p,a[i]=a[i-1]+p;     for(int l=2;l<=n;l++)     {         for(int i=0;i<=n-l+1;i++)         {             int x=l+i-1;             s[i][x]=1<<31-1;             for(int k=i;k<x;k++)s[i][x]=min(s[i][x],s[i][k]+s[k+1][x]+a[x]-a[i-1]);         }     }     cout<<s[1][n];     return 0; }
View Code

能量项链

//程序名:新的C++程序 //作者:   #include<iostream> #include<fstream> #include<algorithm> using namespace std; int n,a[505],ans,dp[505][505]; int main()  {     cin>>n;     for(int i=1;i<=n;i++) cin>>a[i],a[i+n]=a[i];     for(int j=2;j<=n*2;j++)         for(int i=j-1;i>0&&j-i<n;i--)             for(int k=i;k<j;k++)              {                 dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i]*a[k+1]*a[j+1]);                 ans=max(ans,dp[i][j]);             }     cout<<ans; }
View Code

又上锁妖塔

//程序名:新的C++程序 //作者:   #include<iostream> #include<fstream> #include<algorithm>  using namespace std; int n,a[10005],dp[10005][2]; int main() {     cin>>n;     for(int i=1;i<=n;i++)cin>>a[i];     dp[1][1]=a[1];     for(int i=2;i<=n;i++)     {         dp[i][0]=min(dp[i-1][1],dp[i-2][1]);         dp[i][1]=min(dp[i-1][0],dp[i-1][1])+a[i];     }     cout<<min(dp[n][0],dp[n][1])<<endl;     return 0; }
View Code

变音量

//程序名:新的C++程序 //作者:   #include<iostream> #include<fstream> #include<algorithm>  using namespace std; int n,b[10005],st,maxn,dp[65][1005]; int main() {     cin>>n>>st>>maxn;     dp[0][st]=1;     for(int i=1;i<n;i++)cin>>b[i];     for(int i=0;i<=n-1;i++)     {         bool f=0;             for(int j=0;j<=maxn;j++)         if(dp[i][j])         {              f=1;             if(j-b[i]>=0)dp[i+1][j-b[i]]=1;             if(j+b[i]<=maxn)dp[i+1][j+b[i]]=1;         }         if(!f){cout<<-1;exit(0);}     }     for(int i=maxn;i>=0;i--)if(dp[n][i]){cout<<i;break;}     return 0; }
View Code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!