大数构造例题
作者:互联网
对于大数,可以使用string存储。
如果要构造最大的大数,注意数的大小首先比较数的长度,然后从首位往后面的位比较。
例题:
https://atcoder.jp/contests/abc257/tasks/abc257_e
首先可以计算出,可以构造出的最长位数
然后再从大到小对每一位,贪心的判断是否可以换成更大的数。
#include<bits/stdc++.h> using namespace std; typedef long long LL; LL C[10]; string dp[1000010]; void YD() { LL n; cin >> n; for (int i = 1; i <= 9; i++) cin >> C[i]; LL *p= min_element(C + 1, C + 10); LL min_c = *min_element(C + 1, C + 10); LL len = n / min_c; string res(len, '0' + p-C); LL remain = n % min_c; for (int i = 0; i < len; i++) { LL change = 0; for (int j = 1; j <= 9; j++) { if (remain >= C[j] - min_c && j > res[i] - '0') { change = C[j] - min_c; res[i] = '0' + j; } } remain -= change; } cout << res << endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int T = 1; //cin >> T; while (T--) { YD(); } return 0; }View Code
标签:string,min,int,res,LL,大数,构造,len,例题 来源: https://www.cnblogs.com/ydUESTC/p/16418826.html