社区讨论

求助P1658

P1658购物参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mi7xw2b9
此快照首次捕获于
2025/11/21 05:24
4 个月前
此快照最后确认于
2025/11/21 05:24
4 个月前
查看原帖
C
#include<iostream>  
#include<cstdio>  
#include<algorithm>  
using namespace std; 
const int Maxn=1005;  
int n,x,s[Maxn],ans; 
int main()
{  
    int i,j,sum;
    cin>>x>>n;  
    for(i=1;i<=n;i++)cin>>s[i]; 
    sort(s+1,s+1+n); //面值从小到大排序
    if(s[1]!=1)//肯定无解
    {cout<<-1<<endl;   return 0;}  
    sum=0;//sum已经可以凑的钱
    while(sum<x)
    {  
        for(i=n;i>=1;i--)   
            if(s[i]<=sum+1)break;//凑下一个,找可用最大面值的
        ans++;    //选面值s[i]的硬币
        sum+=s[i];//已经凑好的sum,中间间隔s[i]个凑法做过了
    }   
    printf("%d\n",ans);
    return 0;
}
这句话什么意思没看懂题解
C
if(s[i]<=sum+1)break

回复

6 条回复,欢迎继续交流。

正在加载回复...