就做出來一道題,慚愧
感覺樣例第三個有問題
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;
}