1 solutions
-
0
C++ :
#include<cstdio> #include<cstring> #include<string> #include<algorithm> using namespace std; int f[10010]; int word[10010]; int n,num; int main() { scanf("%d\n",&n); num=0; char s[101]; while (scanf("%s",s)!=EOF) word[++num]=strlen(s); memset(f,255,sizeof(f)); f[0]=0; for (int i=0;i<num;i++){ int len=0; for (int j=1;1;j++){ if (i+j>num) break; int bad=0; len=len+word[i+j]; if (len+j-1>n) break; if (j==1&&len<n) bad=500; else if (j==1) bad=0; else { int k,kk; k=(n-len)/(j-1); kk=(n-len)-k*(j-1); bad=kk*k*k+(k-1)*(k-1)*(j-kk-1); } if ((f[i]+bad<f[i+j])||(f[i+j]==-1)) f[i+j]=f[i]+bad; } } printf("Minimal badness is %d.\n",f[num]); return 0; }
- 1
Information
- ID
- 18005
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By