Skip to main content
Original126 words1 min

题解:P9412 「NnOI R1-T1」购物

Summary

给定 n 种面值的硬币,保证最小面值 a_1 为 1,按面值分类讨论求答案。n 为 1 时无解;n 为 2 且 a_2 为 2 时,支付 1 元和 2 元都恰用 1 枚,也无解;n 大于 2 且 a_2 为 2 时答案取 a_3;其余情况 a_2 大于 2,答案为 a_2。时间复杂度 O(n)。

解题思路​

分类讨论:

  • 如果 n=1n=1,显然无解。
  • 如果 n=2n=2,因为题目保证 a1=1a_1=1,如果 a2=2a_2=2,支付 11 元和 22 元都需要 11 枚硬币,所以无解。
  • 如果 n>2n>2,如果 a2=2a_2=2,类似第二种情况,答案不能为 22,所以答案最小为 m=a3m=a_3。
  • 否则,a2a_2 一定大于 22,所以答案最小为 m=a2m=a_2。

参考代码​

261 Bcpp
#include <bits/stdc++.h>
using namespace std;

const int N=15;
int a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
cout<<(n==1||(n==2&&a[2]==2)?-1:n>2&&a[2]==2?a[3]:a[2])<<'\n';
return 0;
}