CF--998D. Roman Digits
阿新 • • 發佈:2018-12-24
題意:I=1, V=5, X=10, L=50,n個位置可任意放4個數,n個數組成的值是每一位的值的和,要求最後代表的值不同的種類數。
思路:一開始想錯了,想成了排列組合的四個數個數不完全相同的種類,,忽略了(IIIIIL)==(VXXXXX)等情況。。
實際上正確的意思,可以暴力打表,就會發現20以後,是等差數列,等差為49.。。
程式碼:
#include<bits/stdc++.h> using namespace std; long long n,z,ans; long long dfs(int x) { map<long long,int>ma; ma.clear(); long long num=0; for(int i=0;i<=x;i++) for(int j=0;j+i<=x;j++) for(int k=0;k+i+j<=x;k++) { z=i+j*5+k*10+(x-i-j-k)*50; if(!ma[z]) {ma[z]=1;num++;} } return num; } int main() { scanf("%lld",&n); if(n<=20) ans=dfs(n); else ans=dfs(20)+(n-20)*49; printf("%lld\n",ans); return 0; }