1 条题解
-
3
我今天终于想起来了这道题…… 我当时好傻啊 没排序…… 得保证单调才能保证一定能搜到
#include<iostream> #include<algorithm> using namespace std; int a[1010]; //记录m种不同的面值.并由低到高排列} int money[25600]; //{记录可能出现的面额} int n,m; void search(int k,int j,int x) //k表示第k个已知面额,j表示可能已知面额的最多数量,x表示目前已构成的面额值 { int i; if ((j==0)||(k==0)) return; for(i=j;i>=0;i--) { x=x+a[k]*i; j=j-i; money[x]=money[x]+1; search(k-1,j,x); j=j+i; x=x-a[k]*i; } } int main() { int i,j; cin>>m>>n; for(i=1;i<=m;i++) cin>>a[i]; sort(a+1,a+m+1); search(m,n,0); for(i=1;i<=n*a[m];i++) if(money[i]==0) { cout<<i-1<<endl; break; } return 0; }
- 1
信息
- ID
- 417
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 72
- 已通过
- 15
- 上传者