#include<bits/stdc++.h> using namespace std; int n,m,a[1001],f[500][500],mi[500][500],i,j; int main() { cin>>n>>m; for(i=1;i<=n;i++)cin>>a[i]; for(i=1;i<=n;i++) for(j=1;j<=m;j++) f[i][j]=9999999;//赋为最大值 for(i=1;i<=n;i++) { for(j=i+1;j<=n;j++) mi[i][j]=mi[i][j-1]+a[j]-a[(i+j)/2];//从第i个村庄到第j个村庄中只建一个邮局的总路径长度 f[i][1]=mi[1][i];//转移到f } for(i=2;i<=n;i++) for(j=2;j<=m;j++) for(int k=j-1;k<i;k++) f[i][j]=min(f[i][j],f[k][j-1]+mi[k+1][i]); cout<<f[n][m]<<endl; return 0; }
#include<iostream> #include<cstring> using namespace std; const int N = 1050; int a[N],f[N]; int main() { int n; cin>>n; for(int i=0;i<n;i++)cin>>a[i]; for(int i=0;i<n;i++)f[i]=1; for(int i=1;i<n;i++) { for(int j=0;j<i;j++) { if(a[j]<a[i])f[i]=max(f[i],f[j]+1); } } int ans = 1; for(int i=0;i<n;i++)ans = max(ans,f[i]); cout<<ans<<endl; return 0; }
/* 1. 这题不支持Special Judge...so设置状态转移方程的时候 要设置成LCIS是以第一个数组的第j个元素结尾的 而不能是第二个数组 - - 就是这么坑0-0 2. 记录LCIS中的元素并输出 dp的时候对结构体dp 结构体中vector记录LCIS中元素。 */ #include<iostream> #include<vector> using namespace std; struct Node { int val = 0; vector<int>v; }; int main() { int a[501], b[501]; Node dp[501]; int m, n; cin >> m; for (int i = 1; i <= m; i++) cin >> a[i]; cin >> n; for (int i = 1; i <= n; i++) cin >> b[i]; for (int i = 1; i <= n; i++) { Node Max; for (int j = 1; j <= m; j++) { if (b[i] > a[j] && dp[j].val > Max.val) Max = dp[j]; if (b[i] == a[j]) { dp[j].val = Max.val + 1; dp[j].v = Max.v; dp[j].v.push_back(b[i]); } } } Node Max = dp[1]; for (int i = 2; i <= m; i++) { if (dp[i].val > Max.val) Max = dp[i]; } cout << Max.val << endl; for (int i = 0; i < Max.v.size(); i++) cout << Max.v[i] << " "; cout << endl; return 0; }
#include<iostream> #include<cstring> using namespace std; int main() { int n,t; int f[1005],a[22]; cin>>n>>t; for(int i=1;i<=n;i++)cin>>a[i]; f[0]=1; for(int i=1;i<=n;i++) for(int j=t;j>=a[i];j--) f[j]+=f[j-a[i]]; cout<<f[t]<<endl; return 0; }