用火柴棍拼出最大的数,思维题,最后发现暴力1e7刚刚不会超时。
就是看如果这个位置放置尽可能大的数,剩余的火柴数够不够或者多不多。
够不够就是lefts>=leftn*2,多不多就是lefts<=leftn*7。
#include <bits/stdc++.h> using namespace std; int a[15]={6,2,5,5,4,5,6,3,7,6}; int main() { int t; scanf("%d",&t); while(t--) { int len; char c[100005]; scanf("%d%s",&len,c); int sum=0; for(int i=0;i<len;i++) sum+=a[c[i]-'0']; for(int i=0;i<len;i++) { for(int j=9;j>=0;j--) { int lefts = sum-a[j]; int leftn = len-i-1; //printf("%d ",lefts); if(leftn*2<=lefts&&lefts<=leftn*7) { putchar('0'+j); sum = lefts; break; } } } puts(""); } return 0; }