#include<iostream> #include<cmath> #include<cstring> #include<algorithm> using namespace std; const int N =0x7fffff; struct len{ long long l = 0,r = 0; }a[N]; long long dp[N]; bool cmp(len a,len b){ if(a.l == b.l) return a.r<b.r; return a.l<b.l; }
int main(){ int n;cin>>n; long long maxy; for(int i=1;i<=n;i++){ cin>>a[i].l>>a[i].r; maxy = max(maxy,a[i].r); } sort(a+1,a+n+1,cmp); int p = 1; long long ans =0; for(int i=0;i<=maxy;i++){ dp[i]=max(dp[i],dp[i-1]); while(a[p].l == i && p<=n){//找左端点相同的 dp[a[p].r]=max(dp[a[p].r],dp[a[p].l-1]+a[p].r-a[p].l+1);//a[p].l-1是正好贴着a[p]的 p++; } ans = max(ans,dp[i]); } cout<<ans; }
#include<iostream> #include<cmath> #include<cstring> #include<algorithm> using namespace std; const int N = 0x7fffff; int n, m; int p[5]; int a[400]; int dp[40][40][40][40];
int dfs(int c1, int c2, int c3, int c4) { int t1 = -1, t2 = -1, t3 = -1, t4 = -1;
int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> a[i]; } for (int i = 1; i <= m; i++) { int x; cin >> x; p[x]++; } for (int i = 0; i <= 39; i++) for (int j = 0; j < 40; j++) for (int k = 0; k < 40; k++) for (int l = 0; l < 40; l++) dp[i][j][k][l] = -1; dp[0][0][0][0] = a[1]; int ans = dfs(p[1], p[2], p[3], p[4]); cout << ans; }
#include<iostream> #include<cmath> #include<cstring> #include<algorithm> #include<vector> using namespace std; const int N = 0x7fffff; int n,m,s; struct p { int hang; int zu[120]; }a[120];
#include<iostream> #include<cmath> #include<cstring> #include<algorithm> #include<vector> using namespace std; const int N = 0x7fffff; int d,g; struct node { int t,f,h; }n[10000]; bool cmp(node a,node b){ return a.t<b.t; } int dp[150][150];
#include <iostream> #include <cmath> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int N = 0x7fffff; int n, m, k; struct guan { int maxh, minh, x = 0x7ff; } n1[10500]; struct updown { int up, down; } move1[10500]; int ha[10500]; int dp[10500][1050]; bool cmp(guan a, guan b) { return a.x < b.x ? 1 : 0; } int new_h[10500][1050];
int main() { cin >> n >> m >> k; int cnt1 = 1; memset(ha, 0, sizeof(ha)); for (int i = 0; i < n; i++) cin >> move1[i].up >> move1[i].down; for (int i = 1; i <= k; i++) { int x; cin >> x; ha[x]++; cin >> n1[i].minh >> n1[i].maxh; n1[i].x = x; cnt1++; } sort(n1 + 1, n1 + k + 1, cmp); memset(dp, 0x3f, sizeof(dp)); int cnt2 = 1; for (int i = 1; i <= m; i++) { dp[0][i] = 0; } for (int i = 0; i < n; i++) { new_h[i][1] = move1[i].up; int cnt = 2; for (int j = 2; j * move1[i].up <= m; j++) { new_h[i][cnt++] = j * move1[i].up; } new_h[i][cnt] = -1; } for (int i = 1; i <= n; i++) { if (!ha[i]) { if (i == 1) for (int j = 0; j <= m; j++) { if (j >= move1[i - 1].up) { dp[i][j] = min(dp[i][j], dp[i - 1][j - move1[i - 1].up] + 1); dp[i][j] = min(dp[i][j], dp[i][j - move1[i - 1].up] + 1); } } else for (int j = 1; j <= m; j++) { if (j >= move1[i - 1].up) { dp[i][j] = min(dp[i][j], dp[i - 1][j - move1[i - 1].up] + 1); dp[i][j] = min(dp[i][j], dp[i][j - move1[i - 1].up] + 1); } } if (i == 1) for (int j = 0; j <= m; j++) { if (j + move1[i - 1].down <= m) dp[i][j] = min(dp[i][j], dp[i - 1][j + move1[i - 1].down]); } else for (int j = 1; j <= m; j++) { if (j + move1[i - 1].down <= m) dp[i][j] = min(dp[i][j], dp[i - 1][j + move1[i - 1].down]); } for (int j = m - move1[i - 1].up; j <= m; j++) { dp[i][m]=min(dp[i][m],min(dp[i][j],dp[i-1][j])+1); } dp[i][m] = min(dp[i - 1][m] + 1, dp[i][m]); } if (ha[i]) { if (i == 1) for (int j = 0; j <= m; j++) { if (j >= move1[i - 1].up) { dp[i][j] = min(dp[i][j], dp[i - 1][j - move1[i - 1].up] + 1); dp[i][j] = min(dp[i][j], dp[i][j - move1[i - 1].up] + 1); } } else for (int j = 1; j <= m; j++) { if (j >= move1[i - 1].up) { dp[i][j] = min(dp[i][j], dp[i - 1][j - move1[i - 1].up] + 1); dp[i][j] = min(dp[i][j], dp[i][j - move1[i - 1].up] + 1); } } if (i == 1) for (int j = 0; j <= m; j++) { if (j + move1[i - 1].down <= m) dp[i][j] = min(dp[i][j], dp[i - 1][j + move1[i - 1].down]); } else for (int j = 1; j <= m; j++) { if (j + move1[i - 1].down <= m) dp[i][j] = min(dp[i][j], dp[i - 1][j + move1[i - 1].down]); } for (int j = m - move1[i - 1].up; j <= m; j++) { dp[i][m]=min(dp[i][m],min(dp[i][j],dp[i-1][j])+1); } dp[i][m] = min(dp[i - 1][m] + 1, dp[i][m]); int res = 0x3f3f3f3f; for (int j = n1[cnt2].minh + 1; j <= n1[cnt2].maxh - 1; j++) { res = min(res, dp[i][j]); } for (int j = 1; j <= m; j++) { if (!(j >= n1[cnt2].minh + 1 && j <= n1[cnt2].maxh - 1)) dp[i][j] = 0x3f3f3f3f; } if (res >= 0x3f3f3f3f) { cout << 0 << endl << cnt2 - 1; return 0; } cnt2++; } } int ans = 0x7ffff; for (int i = 1; i <= m; i++) ans = min(ans, dp[n][i]); cout << 1 << endl << ans << endl; return 0; }