标签:col bsp force src idt csdn image printf 不难
缺欠的是做题的思路,当看到这道题发现n是10^9级别,第一反应是得找到一个公式。但怎么找没想出来。
满足i+j+k+p = n (i,j,k,p分别是1,5,10,50取的个数),我们可以用n^3代价(枚举i,j,k)n比较小的时候的答案,并试着从枚举得到的答案里找到规律。
事实也确实能从中找到规律,n从12开始就是等差数列了,方差49。
这题说难不难,但当时卡了很多人。
缺少的是一种思路吧。
也确实第一道遇到的半打表ac的题
1 #include<bits/stdc++.h> 2 using namespace std; 3 long long n,z,ans; 4 long long dfs(int x) 5 { 6 map<long long,int>ma; 7 ma.clear(); 8 long long num=0; 9 for(int i=0;i<=x;i++) 10 for(int j=0;j+i<=x;j++) 11 for(int k=0;k+i+j<=x;k++) 12 { 13 z=i+j*5+k*10+(x-i-j-k)*50; 14 if(!ma[z]) {ma[z]=1;num++;} 15 } 16 return num; 17 } 18 int main() 19 { 20 scanf("%lld",&n); 21 if(n<=20) ans=dfs(n); 22 else ans=dfs(20)+(n-20)*49; 23 printf("%lld\n",ans); 24 return 0; 25 }
代码是从这里摘的,没有自己写了
https://blog.csdn.net/qq_37868325/article/details/80879686
Codeforces 997B Roman Digits【暴力】【枚举】
标签:col bsp force src idt csdn image printf 不难
原文地址:https://www.cnblogs.com/ZhenghangHu/p/9255724.html