0
已解决
#include<iostream>
using namespace std;
int main(){
int n,cnt=0;
cin>>n;
for(int i=0;i<=n*100/10;i++){
for(int j=0;j<=n*100/20;j++){
int k=n*100-i*10-j*20;
if(k%50==0&&k>=0){
cnt++;
}
}
}
cout<<cnt;
return 0;
}
Time Limit Exceeded
30
请找错
陈曦在2020-08-03 07:59:39追加了内容
顶
陈曦在2020-08-03 08:10:37追加了内容
加悬赏啦!
0
0
0
0
0
以下是核心:
int a=n*100/50/*计算最大面值钞票张数*/,x,y,b;
for(int i=0;i<=a;i++)
{
x=n*100-i*50;//剩余钱数
y=x/20;//20元钞票张数
for(int j=0;j<=y;j++)
{
sum++;//兑换的方式总数
}
}
cout<<sum;
张天璨在2020-08-04 08:39:10追加了内容
直接枚举就可以了。
别忘了采纳我!
0
0
0
枚举核心如下:
n*=100;//n张100,共100*n元
int count=0;//方法数
int end=n/50;
for(int i=0;i<=end;i++)
count+=(n-i*50)/20+1;//一共有多少种方法
count就是最后答案!
望采纳
0
建议学习时间复杂度,n<=10000,你写个O(n^2)的生怕不超时?
我觉得可以dp的思想,就是那个coin问题的思路
f[i]=f[i-10]+f[i-20]+f[i-50];
当然状态转移方程方程我口胡的,不保证正确性,别受我过大误导
黄子扬在2020-08-02 22:04:27追加了内容
就是假如我们考虑1000元有多少组成方式
我们可以从 990元 980元 和950元 三种面值的方案来考虑
将三种方案相加应该就是1000元面值的
0
0
0