fork(1) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define int_max 200000000
  4. int trigraph(int,int,int,vector<vector<int>>,vector<vector<int>>&);
  5. int main()
  6. {
  7. int n,tc=0;
  8. while(cin>>n){
  9. if(n==0)
  10. break;
  11. tc++;
  12. vector<vector<int>> arr(n,vector<int> (3));
  13. vector<vector<int>> fin(n,vector<int> (3,-200000000));
  14. for(int i=0;i<n;i++)
  15. for(int j=0;j<3;j++)
  16. cin>>arr[i][j];
  17. cout<<tc<<". "<<trigraph(n,0,1,arr,fin)<<endl;
  18. }
  19. return 0;
  20. }
  21. int trigraph(int n,int a,int b,vector<vector<int>> arr,vector<vector<int>>&fin)
  22. {
  23. int temp,flag=0;
  24. if(b<0 || b>2)
  25. return int_max;
  26. if(a>=n){
  27. return 0;
  28. }
  29. if(fin[a][b]!=-200000000)
  30. return fin[a][b];
  31. int b1=b;
  32. fin[a][b]=arr[a][b]+min(trigraph(n,a+1,b-1,arr,fin),min(trigraph(n,a+1,b,arr,fin),trigraph(n,a+1,b+1,arr,fin)));
  33. b1++;
  34. while(b1<3){
  35. if(flag==0){
  36. temp=arr[a][b]+arr[a][b1]+min(trigraph(n,a+1,b1-1,arr,fin),min(trigraph(n,a+1,b1,arr,fin),trigraph(n,a+1,b1+1,arr,fin)));
  37. }
  38. if(flag==1){
  39. temp=arr[a][b]+arr[a][b1]+arr[a][b1-1]+min(trigraph(n,a+1,b1-1,arr,fin),min(trigraph(n,a+1,b1,arr,fin),trigraph(n,a+1,b1+1,arr,fin)));
  40. }
  41. flag=1;
  42. if(temp<fin[a][b])
  43. fin[a][b]=temp;
  44. b1++;
  45. }
  46. return fin[a][b];
  47. }
  48.  
Success #stdin #stdout 0s 4384KB
stdin
2
1 3 -3
2 3 4 
0
stdout
1. 3