题目链接
https://codeforces.com/problemset/problem/998/D
解题思路
哇,我还搞数学公式啥的,发现自己错误的证明出没有重复的了……
打表找规律
大佬思路:
AC代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[]={1,4,10,20,35,56,83,116,155,198,244,292};
ll n;
int main()
{
cin>>n;
if(n<=11) cout<<a[n]<<endl;
else cout<<a[11]+(n-11)*49<<endl;
return 0;
}
打表代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int vis[5010],cnt[110],cntt;
signed main()
{
for(int i=0;i<=100;i++)
{
for(int j=0;j<=i;j++)
for(int k=0;k<=i-j;k++)
for(int t=0;t<=i-j-k;t++)
vis[j*1+k*5+t*10+(i-j-k-t)*50]=1;
for(int j=0;j<=50*i;j++)
if(vis[j]) cnt[i]++,cntt++;
cout<<cntt<<' '<<(i>=1?cnt[i]-cnt[i-1]:0)<<endl;
cntt=0;
memset(vis,0,sizeof vis);
}
for(int i=0;i<=11;i++) cout<<cnt[i]<<',';
}
总结
我觉得这道题最应该学的是做题方法,
看到这么大的数据应该想到可以直接输出答案,要不有规律要不是数学公式,
当自己发现数学公式不会或者不对的时候,就应该尝试一下打表。

京公网安备 11010502036488号