1. 程式人生 > >Codeforces 997B Roman Digits【暴力】【枚舉】

Codeforces 997B Roman Digits【暴力】【枚舉】

printf https urn lse ans def can eight png

缺欠的是做題的思路,當看到這道題發現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【暴力】【枚舉】