1 条题解
-
0
Guest
-
2
写代码不易,点个赞谢谢^^。
高精度+简单dp/记忆化dfs。
#include<bits/stdc++.h> using namespace std; int dig[11]; int match[]={0,2,5,5,4,5,6,3,7,6}; int n,m; vector<string> dp(10005,"-1"); bool str_max(string a,string b){//比较 if(a.size()!=b.size()) return a.size()>b.size(); else return a>b;//位数相同,大的放前面 } string dfs(int N){ if(dp[N]!="-1") return dp[N];//搜过了 string ans="0"; for(int i=0;i<m;i++){ int cost=match[dig[i]]; if(N<cost) continue;//如果不够摆 string nxt=dfs(N-cost);//接下来的 if(nxt!="0"){//如果有效 string tmp=to_string(dig[i])+nxt; if(str_max(tmp,ans))//打擂台 ans=tmp; } } return dp[N]=ans;//记忆化 } int main(){ cin>>n>>m; for(int i=0;i<m;i++) cin>>dig[i]; dp[0]="";//初始化 cout<<dfs(n); }
信息
- ID
- 903
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者