深信服 2019校园招聘 研发试卷-2018.09.21
就做出来一道题,惭愧
感觉样例第三个有问题
1 2 3 3 6 9 我觉得应该输出1 1,可样例输出UNKNOWN
以下是错误代码,0%
实在找不到问题,,,GG
#include <iostream>
using namespace std;
int main()
{
int T;
cin >> T;
for(int i=0; i<T; i++){
float a1, b1, v1, a2, b2, v2, x, y;
cin >> a1 >> b1 >> v1 >> a2 >> b2 >> v2;
if(a1+b1 == v1 && a2+b2 == v2){
cout << 1 << " " << 1 << endl;
continue;
}
x = (v1-b1/b2*v2)/(a1-b1/b2*a2);
y = (v2-a2*x)/b2;
if(x >= 0 && x <= 1000000000 && y >= 0 && y <= 1000000000
&& x-(int)x == 0 && y-(int)y == 0){
cout << x << " " << y << endl;
continue;
}
cout << "UNKNOWN" << endl;
//cout << x << " " << y << endl;
}
return 0;
}
求最小连续子序列和,DP思想
#include <bits/stdc++.h>
#define MAX 10000005
// A[i] 存放序列,dp[i] 存放以 A[i] 为结尾的连续序列的最大和
int A[MAX], dp[MAX];
// 求较大值
int min(int a, int b) {
return a<b ? a : b;
}
int main() {
int T, i, res;
scanf("%d", &T);
for(i=0; i<T; ++i) { // 输入序列
scanf("%d", &A[i]);
}
dp[0] = A[0]; // 边界
for(i=1; i<T; ++i) {
// 状态转移方程
dp[i] = min(A[i], dp[i-1] + A[i]);
}
// 求最大连续子序列和
res = dp[0];
for(i=1; i<T; ++i) {
if(dp[i] < res) {
res = dp[i];
}
}
printf("%d\n", res); // 输出
return 0;
}