防卫导弹
//程序名:新的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; }
会议厅
#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; }
合唱队形
//程序名:新的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; }
石子归并
//程序名:新的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; }
能量项链
//程序名:新的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; }
又上锁妖塔
//程序名:新的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; }
变音量
//程序名:新的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; }