思路:
根據資料範圍, 很容易確定用d[i][j]表示前i位和為j是否能組成符合要求的數字。 用path[i][j]表示下乙個狀態的j值, hehe[i][j]表示當前狀態選了哪個數字。
特判n == 1 && s == 0。
細節參見**:
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
typedef long long ll;
typedef long double ld;
const double eps = 1e-6;
const double pi = acos(-1);
const int mod = 1000000000 + 7;
const int inf = 0x3f3f3f3f;
// & 0x7fffffff
const int seed = 131;
const ll inf64 = ll(1e18);
const int maxn = 100;
int t,n,m,d[110][910], vis[110][910], kase = 0, sum, path[110][910], hehe[110][910];
int dp1(int i, int j)
if(vis[i][j] == kase) return ans;
vis[i][j] = kase;
ans = 0;
for(int k = 0; k < 10; k++)
}return ans;
}void print(int i, int j)
int dp2(int i, int j)
if(vis[i][j] == kase) return ans;
vis[i][j] = kase;
ans = 0;
for(int k = 9; k >= 0; k--)
}return ans;
}int main()
++kase;
int ans1 = dp1(1, 0);
if(!ans1)
print(1, 0);
printf(" ");
++kase;
int ans2 = dp2(1, 0);
print(1, 0);
printf("\n");
}return 0;
}
UESTC 我要長高
題意是 就是題目描述的那樣了吧 題意很顯而易見,一眼dp題 dp i j 代表第i個人身高為j時的最小消耗,dp i j min dp i 1 k abs j k c j h i 2 複雜度o n h i 2 很明顯有點大,學習了一下單調佇列優化dp之後,發現形如dp i min max dp j ...
UESTC 方老師與素數
方老師最近很喜歡素數,他想玩乙個遊戲 現在有兩個 4 位的素數 n 和 m 你一次可以改變 n 的一位數字,並且改變過後的新數字必須也是個素數,並且也不能有前導 0 請問使 n 變為 m 最少需要多少步。例如n 1033 m 8179 那麼可行的變化是 1033 1733 3733 3739 377...
UESTC 1552 尤拉函式
include include include include include includeusing namespace std define lc l,m,index 1 define rc m 1,r,index 1 1 define ll long long define inf 0x3f...