BestCoder Round #91 1001 Lotus and Characters
生活随笔
收集整理的這篇文章主要介紹了
BestCoder Round #91 1001 Lotus and Characters
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6011
題意:
Lotus有nn種字母,給出每種字母的價值以及每種字母的個數(shù)限制,她想構(gòu)造一個任意長度的串。 定義串的價值為:第1位字母的價值*1+第2位字母的價值*2+第3位字母的價值*3…… 求Lotus能構(gòu)造出的串的最大價值。(可以構(gòu)造空串,因此答案肯定\geq 0≥0)分析:
做這個題目的時候,第一感覺回溯算了,不用想,肯定T了。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int n; 6 int val[30]; 7 int cnt[30]; 8 int len; 9 10 int dfs(int cur) 11 { 12 int ans = 0; 13 if(cur>=len+1) return 0; 14 else 15 { 16 for(int i=0; i<n; i++) 17 { 18 if(cnt[i]>0) 19 { 20 cnt[i]--; 21 ans = max(ans,(cur+1)*val[i]+dfs(cur+1)); 22 cnt[i]++; 23 } 24 } 25 } 26 return ans; 27 } 28 29 int main() 30 { 31 int t; 32 scanf("%d",&t); 33 34 while(t--) 35 { 36 scanf("%d",&n); 37 len = 0; 38 for(int i=0; i<n; i++) 39 { 40 scanf("%d%d",&val[i],&cnt[i]); 41 len+=cnt[i]; 42 } 43 44 printf("%d\n",dfs(0)); 45 } 46 return 0; 47 }?
后來想DP,直覺告訴我,正權(quán)值的放后面。每次計算后面的數(shù)值,又不知道前面有多少位,怎么解決這個問題呢?
就類似于前綴和,寫一個后綴和,之前的位數(shù)不確定,怎么解決呢?
Ans[i] = Ans[i+1] + sum[i+1] +v[i];
狀態(tài)轉(zhuǎn)移就是多加了一遍后綴和,和首位。最后找一下最好的切割點。
其實這個切割點也可以從后往前找。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int main() 6 { 7 int t; 8 scanf("%d",&t); 9 while(t--) { 10 int n; 11 scanf("%d",&n); 12 13 vector<int> v; 14 15 for(int i=0;i<n;i++) { 16 int val,cnt; 17 scanf("%d%d",&val,&cnt); 18 for(int i=0;i<cnt;i++) { 19 v.push_back(val); 20 } 21 } 22 23 sort(v.begin(),v.end()); 24 25 int len = v.size(); 26 27 int Ans[10010]; 28 int sum[10010]; 29 30 memset(Ans,0,sizeof(Ans)); 31 memset(sum,0,sizeof(sum)); 32 33 for(int i=len-1;i>=0;i--) { 34 sum[i] = sum[i+1] + v[i]; 35 } 36 37 for(int i=len-1;i>=0;i--) { 38 Ans[i] = Ans[i+1] + sum[i+1] + v[i]; 39 } 40 41 int ans = 0; 42 43 //for(int i=0;i<len;i++) { 44 // ans = max(ans,Ans[i]); 45 //} 46 47 48 for(int i=len-1;i>=0;i--) { 49 if(ans<Ans[i]) 50 ans = Ans[i]; 51 else break; 52 } 53 54 printf("%d\n",ans); 55 } 56 57 return 0; 58 }?
轉(zhuǎn)載于:https://www.cnblogs.com/TreeDream/p/6339982.html
總結(jié)
以上是生活随笔為你收集整理的BestCoder Round #91 1001 Lotus and Characters的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 安装 Scoop
- 下一篇: 用Delphi即时判断当前的网络的连接方