for(int i=T-1;i>=0;i--){ for(int j=1;j<=n;j++){ dp[i][j]=dp[i+1][j]+1; f(i+t[j]<=T&&havetrain[0][j][i]&&j<n){ dp[i][j]=min(dp[i][j],dp[i+t[j]][j+1]); } if(i+t[j-1]<=T&&havetrain[1][j][i]&&j>1){ dp[i][j]=min(dp[i][j],dp[i+t[j-1]][j-1]); } } }
#include <bits/stdc++.h> using namespace std; int f[100000]; long long solve(long long p, int n) { return f[n - 1] * (p / n) + f[p % n]; } int main() { int t; scanf("%d", &t); while(t --) { int a, b, q; scanf("%d %d %d", &a, &b, &q); int n = a * b; for (int i = 1; i < n; i ++) { f[i] = f[i - 1]; if(i % a % b != i % b % a) f[i] ++; } while(q --) { long long l, r; scanf("%lld %lld", &l, &r); printf("%lld ", solve(r, n) - solve(l - 1, n)); } puts(""); } return 0; }
原文:https://www.cnblogs.com/ShouaoChen/p/12812746.html