其实如果想出了方法真的好水的说...
然而一开始想了好久都没想出来...
最后看了一下最大数据才32768
可以直接枚举...枚举每个硬币的数量 看看后来能不能凑够n
因为还是怕超时..(虽然只有3乘十的四次方)所以先枚举三分 然后二分 最后一分肯定足够 就不用了
自己好傻...
#include<stdio.h> #include<string.h> #include<algorithm> #include<map> #include<math.h> using namespace std; int main(){ int n; while(~scanf("%d",&n)) { long long int ans=0; for(int i=0;;i++) { if(n-i*3<0) break; for(int k=0;;k++) { if(n-i*3-k*2>=0) ans++; else break; } } printf("%d ",ans); } }