UESTC 1251 諭神的密碼(DP)

2021-07-23 20:30:28 字數 1441 閱讀 2347

思路:

根據資料範圍, 很容易確定用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...