标签:amp 整数 直接 路径 oar ace 使用 测试 ogg
1 2 4 8 3 2 1 4
Case 1: 4 CB
dp题, 但是还要保留路径,直接再多开一个数组最后迭代输出路径即可
1 #include <stdio.h> 2 #include <string.h> 3 #include<algorithm> 4 using namespace std; 5 struct node 6 { 7 int x, y, z; 8 }a[1005], b[1005]; 9 int ans[1005], sum, minn, n; 10 void fact(int s) 11 { 12 int m=n; 13 while(m) 14 { 15 if(s==1) 16 {ans[m]= b[m].x;s=b[m].x;} 17 else if(s==2) 18 {ans[m]=b[m].y;s=b[m].y;} 19 else 20 {ans[m]= b[m].z;s=b[m].z;} 21 m--; 22 } 23 } 24 int main() 25 { 26 int t, tt=1; 27 scanf("%d", &t); 28 while(t--) 29 { 30 scanf("%d", &n); 31 memset(a, 0, sizeof(a)); 32 for(int i=1; i<=n; i++) 33 scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].z); 34 for(int i=1; i<n; i++) 35 { 36 a[i+1].x=a[i+1].x+min(a[i].y, a[i].z); 37 if(a[i].y>a[i].z) 38 b[i].x=3; 39 else 40 b[i].x=2; 41 a[i+1].y=a[i+1].y+min(a[i].x, a[i].z); 42 if(a[i].x>a[i].z) 43 b[i].y=3; 44 else 45 b[i].y=1; 46 a[i+1].z=a[i+1].z+min(a[i].x, a[i].y); 47 if(a[i].x>a[i].y) 48 b[i].z=2; 49 else 50 b[i].z=1; 51 } 52 minn=min(min(a[n].x, a[n].y), a[n].z); 53 printf("Case %d: %d ",tt++, minn); 54 if(minn==a[n].x) 55 {b[n].x=1;fact(1);} 56 else if(minn==a[n].y) 57 {b[n].y=2;fact(2);} 58 else 59 {b[n].z=3;fact(3);} 60 for(int i=1; i<=n; i++) 61 printf("%c", ans[i]+‘A‘-1); 62 printf("\n"); 63 } 64 return 0; 65 }
标签:amp 整数 直接 路径 oar ace 使用 测试 ogg
原文地址:http://www.cnblogs.com/zhulei2/p/7978123.html